iOS 13-UIPopoverPresentationController sourceview内容在箭头中可见

Has*_*ssy 9 popover uipopoverpresentationcontroller ios13

当我在UIPopoverPresentationController中显示一些视图并将其显示为弹出窗口时

popoverCon?.modalPresentationStyle = UIModalPresentationStyle.popover
Run Code Online (Sandbox Code Playgroud)

内容已向上移动,并且箭头中显示了一部分。

在此处输入图片说明

此外,我在弹窗周围有边界

popoverCon?.view.layer.borderColor = .orange
popoverCon?.view.layer.borderWidth = 1.0;
popoverCon?.view.layer.cornerRadius = 10.0;
popoverCon?.view.layer.masksToBounds = false;
Run Code Online (Sandbox Code Playgroud)

它没有朝着箭头所在的部分显示,但在箭头的尖端显示了少许边界线。

在此处输入图片说明

在iOS 12之前,它一直工作良好,但在iOS 13中,此问题即将出现。

关于如何解决这个问题有什么建议吗?

pow*_*old 8

我的 tableView 内容的顶部被箭头截断了。这就是我在我的情况下修复它的方式(代码插入到我的 tableViewController Swift 文件中):

override func viewSafeAreaInsetsDidChange() {
    if #available(iOS 11.0, *) {
        super.viewSafeAreaInsetsDidChange()
        self.tableView.contentInset = UIEdgeInsets(top: self.tableView.safeAreaInsets.top, left: 0, bottom: 0, right: 0)
    }
}
Run Code Online (Sandbox Code Playgroud)


Sas*_*hah 6

我在 Obj-C 中的解决方案,适用于那些需要 obj-c 解决方案的人。

我以前只有 popovercontroller,它正在创建问题中所示的错误。为了清楚起见,我将其重命名为 childController 并创建了一个包含 popoverController 的内容,以使@SaintMSent 给出的解决方案在我最初只有一个视图的情况下工作。也用过/sf/answers/3295322831/解决方案和https://useyourloaf.com/blog/self-sizing-child-views/来适当调整大小,因为我的所有 childController 都经常设置首选内容大小。

//Create container popover controller and add child to it
UIViewController* popoverController = [[MyParentPopoverController alloc] init];
[popoverController.view addSubview:childController.view];
[popoverController addChildViewController:childController];
[popoverController setPreferredContentSize:childController.preferredContentSize];
//set popover settings on container
popoverController.modalPresentationStyle = UIModalPresentationPopover;
popoverController.popoverPresentationController.sourceRect = sourceRect;
popoverController.popoverPresentationController.sourceView = buttonView;
popoverController.popoverPresentationController.permittedArrowDirections = direction;
//Fix ios13 'bug' that Apple claims is a feature
UILayoutGuide* guide = popoverController.view.safeAreaLayoutGuide;
childController.view.translatesAutoresizingMaskIntoConstraints = NO;
[childController.view.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor].active = YES;
[childController.view.trailingAnchor constraintEqualToAnchor:guide.trailingAnchor].active = YES;
[childController.view.topAnchor constraintEqualToAnchor:guide.topAnchor].active = YES;
[childController.view.bottomAnchor constraintEqualToAnchor:guide.bottomAnchor].active = YES;
[popoverController.view layoutIfNeeded];
//Show the popover
Run Code Online (Sandbox Code Playgroud)

...

@interface MyParentPopoverController : UIViewController

@end

@implementation MyParentPopoverController

-(void)preferredContentSizeDidChangeForChildContentContainer:(id <UIContentContainer>)container {
    [super preferredContentSizeDidChangeForChildContentContainer:container];
    [self setPreferredContentSize:container.preferredContentSize];
}

@end
Run Code Online (Sandbox Code Playgroud)

注意:我没有检查 ios11 兼容性,因为我的用户群被限制为不使用它。


Has*_*ssy 0

在互联网上搜索我从以下链接获得了帮助

推特

所以我必须添加安全区域并相应地管理我的视图

CGFloat topPadding = 0.0;
    if (@available(iOS 11.0, *)) {
         topPadding = self.view.safeAreaLayoutGuide.layoutFrame.origin.y;
    }
Run Code Online (Sandbox Code Playgroud)

迅速:

var topPadding: CGFloat = 0.0
    if #available(iOS 11.0, *) {
        topPadding = self.view.safeAreaLayoutGuide.layoutFrame.origin.y
    }
Run Code Online (Sandbox Code Playgroud)

但我还没有解决我的边界问题。

编辑: 我暂时通过在弹出窗口上创建一个不可见视图并为其提供与安全区域相同的框架并绘制其边框来解决了边框问题。