提问人:Silverness 提问时间:11/7/2023 最后编辑:Silverness 更新时间:11/17/2023 访问量:54
设置 UIViewController preferredContentSize 在 iOS 17 中不起作用
Setting UIViewController preferredContentSize not working in iOS 17
问:
在 iOS 17 中,我遇到了一个问题,即 UIPopoverPresentationControllers 没有保留它们所包含的 UIViewController 的首选大小。
以下方法使用 UIPopoverPresentationController 显示来自 UIView 定位点位置的 UIViewController。popoverVC
contentVC
view
frame
+ (void) showDialogiPad:(UIViewController *)contentVC
fromPresentingVC:(UIViewController *)presentingVC
inView:(UIView *)view
atFrame:(CGRect)frame
withDirection:(UIPopoverArrowDirection)direction {
// Set content view controller size
contentVC.preferredContentSize = contentVC.view.frame.size; // size should be 320x480
// Choose the presentation style in which the content is
// displayed in a popover view
contentVC.modalPresentationStyle = UIModalPresentationPopover;
// Set the popover size and anchor location
contentVC.popoverPresentationController.sourceRect = frame;
contentVC.popoverPresentationController.sourceView = view;
// Present the popover presentation controller
[presentingVC presentViewController:contentVC animated:YES completion:nil];
}
的大小在其方法中设置如下:contentVC
viewDidLoad
- (void)viewDidLoad {
[super viewDidLoad];
// Set the size of this view controller (which is used in a popup view controller)
self.view.frame = CGRectMake(0, 0, 320, 480);
// Set a border around the view
CALayer *layer = self.view.layer;
layer.borderColor = [[UIColor darkGrayColor] CGColor];
layer.borderWidth = 2;
layer.cornerRadius = 10;
}
在 iOS 17 之前,代码按预期显示弹出框,如下所示:
然而,现在,自从更新到 iOS 17 以来,弹出框现在被压缩并显示为:
几点观察:
- 弹出框对话框实际上在您第一次打开时会正确显示。每次打开它时,它都会被压扁。
- 当我注释掉设置 的行时,弹出框每次都以最大大小打开 - 因此它显示所有内容,但未设置为我想要的大小。
preferredContentSize
- 如果我保持原样但更改为 ,则弹出框的大小是正确的,但弹出框始终显示在屏幕中间。
preferredContentSize
modalPresentationStyle
UIModalPresentationFormSheet
答:
1赞
HangarRash
11/7/2023
#1
我发现,在许多情况下,如果给定的视图控制器覆盖该属性,而不是在外部将视图控制器的属性设置为某个值,效果会更好。这样做的好处是将首选大小的知识放在视图控制器本身中。preferredContentSize
preferredContentSize
- (CGSize)preferredContentSize {
return CGSizeMake(width: 320, height: 480);
}
上一个:强制视图提前加载子视图的简洁方法
评论