设置UIViewController preferredContentSize在iOS 17中不起作用

kgqe7b3p  于 12个月前  发布在  iOS
关注(0)|答案(1)|浏览(199)

在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,则弹出框的大小是正确的,但弹出框始终显示在屏幕中间。
fivyi3re

fivyi3re1#

我发现在很多情况下,如果给定的视图控制器覆盖preferredContentSize属性,而不是外部设置视图控制器的preferredContentSize属性为某个值,它会工作得更好。这也有将首选大小的知识放在视图控制器本身的好处。

- (CGSize)preferredContentSize {
    return CGSizeMake(width: 320, height: 480);
}

字符串

相关问题