如何使 UIPopoverPresentationController 在弹出导航时调整大小?

How can I make UIPopoverPresentationController resize on navigation pop?

我在 iOS 应用程序中使用 UIPopoverPresentationController 作为弹出窗口。当弹出窗口中的导航控制器推送新的视图控制器时,弹出窗口的大小会调整为该视图控制器的 preferredContentSize。但是当导航控制器从堆栈中弹出一个视图控制器时,弹出窗口不会调整到以前的大小。我怎样才能做到这一点?

可能与 this question 重复,但对于现代 UIPopoverPresentationController

更新: 请参阅 here 说明问题的示例代码。克隆它并 运行 在 iPad 模拟器中。点击 Popover 按钮,你会得到一个带有导航控制器的弹出窗口。点击 Push bar button item,你会在堆栈上得到一个新的更高的 VC(尺寸在导航栏中)。弹出,它不会调整回原来的大小。

只需添加您的 ViewController 下一个代码

- (void) viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    self.navigationController.preferredContentSize = CGSizeMake(200, self.parentViewController.childViewControllers.lastObject.preferredContentSize.height-100);
}

这里是video。希望这是您期望得到的行为。

添加这一行:

self.navigationController.preferredContentSize = self.preferredContentSize;

到您的 viewWillAppear: 方法,这样它现在看起来像这样:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if (self.navigationController)
    {
        UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithTitle:@"Push" style:UIBarButtonItemStylePlain target:self action:@selector(onPush)];
        self.navigationItem.rightBarButtonItem = item;
        self.navigationItem.title = NSStringFromCGSize(self.preferredContentSize);
        self.view.backgroundColor = [UIColor lightGrayColor];

        self.navigationController.preferredContentSize = self.preferredContentSize;
    }
}

它将确保每次显示的视图控制器更改时更新导航控制器的首选大小。我在您的示例代码上对其进行了测试,它解决了问题。