0

自从迁移到 Swift 5 后,已将 allowedArrowDirections 设置为 .left/.right 的弹出框渲染得稍微偏离了它们应该在的位置。但是,当将 allowedArrowDirections 设置为 .top/.bottom 时,问题就消失了。请看下图:

弹出窗口问题

我将弹出窗口设置如下:

let popoverController = colorPickerVC.popoverPresentationController
popoverController!.permittedArrowDirections = .right
popoverController!.sourceRect = CGRect(x: Constants.uiPopoverArrowHorizontallOffset2, y: self.buttonLayersPicker.frame.height/2 ,width: 0,height: 0) // anchor popover to middle-left of calling button
popoverController?.backgroundColor = Constants.uiColorPopupBgDark1 // set the color of the popover arrow
    popoverController?.passthroughViews = [viewControllerMain.view] // allow interaction with bg view while popover is being displayed
// present popover
viewControllerMain.present(colorPickerVC, animated: true, completion: nil)

有没有人提出这个问题?如何解决?

提前致谢

4

1 回答 1

1

这不是 Swift 5 特有的。这是 iOS 13 中的一个变化。弹出箭头占据的区域现在是视图框架的一部分。解决方案是确保您的布局基于视图的安全区域。换句话说,根据视图控制器的视图设置子视图的约束safeAreaLayoutGuide

通过使用安全区域,无论弹出箭头位于何处,您的布局都是正确的,即使您支持 iOS 11 或 12 以及 13,它也可以正常工作。

于 2019-10-02T04:50:21.267 回答