iOS 13 以后,UIPopoverController弹出的view的size要比设置的preferredContentSize多13个尺寸,导致布局偏移,如下图:
iOS13: iOS12:
这是由于iOS13后,箭头的frame包含在了view的frame中。
解决办法:
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
// 关键点在这里, 这里获取到layoutFrame,使用这个值来布局,就会让出`arrow`所占用的位置。
if (@available(iOS 11.0, *)) {
CGRect layoutFrame = self.view.safeAreaLayoutGuide.layoutFrame;
self.view.frame = layoutFrame;
}
}