在iOS 17中,我遇到了一个问题,即UIPoverPresentationController没有保留它们包含的UIViewController的首选大小。
以下方法使用UIPoverPresentationController popoverVC
从UIView view
锚位置frame
显示UIViewController contentVC
。
+ (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之前,代码按预期显示弹出框,如下所示:
x1c 0d1x的数据
然而现在,自从更新到iOS 17以来,popover现在被压扁并显示为:
的
几点意见:
- 弹出对话框实际上在你第一次打开它的时候就能正常显示。以后每次打开它的时候,它都会被压扁。
- 当我注解掉设置
preferredContentSize
的行时,弹出框每次都以最大大小打开-所以它显示所有内容,但没有设置为我想要的大小。 - 如果我保持
preferredContentSize
不变,但将modalPresentationStyle
更改为UIModalPresentationFormSheet
,则弹出框的大小是正确的,但弹出框始终显示在屏幕中间。
1条答案
按热度按时间fivyi3re1#
我发现在很多情况下,如果给定的视图控制器覆盖
preferredContentSize
属性,而不是外部设置视图控制器的preferredContentSize
属性为某个值,它会工作得更好。这也有将首选大小的知识放在视图控制器本身的好处。字符串