将圆角应用于UIView时约束未正确显示(仅在iPhone XS Max和+ Versions上)

时间:2019-03-29 18:07:37

标签: ios swift uiview autolayout ios-autolayout

我正在使用此函数对UIView进行四舍五入:

func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
        let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        self.layer.mask = mask
    }

override func viewDidLoad() {
        super.viewDidLoad()

        someUIView.roundCorners([.topLeft,.topRight], radius: 20)            
    }

这可以按预期工作,但在iPhone XS Max和All Plus型号上进行测试时,约束会变得混乱,但仅限于屏幕左侧。

我不知道为什么,我认为这与圆角功能如何在视图上应用图层有关,因为即使在那些iPhone机型上,我删除圆角布局也很好,或者也许必须这样做有利润? Idk,但如果有人能帮助我解决这个问题,我将不胜感激。

Image so you can appreciate the problem (XS, XSMax, 7, 7+)

1 个答案:

答案 0 :(得分:1)

您正在使用UIBezierPath在放置视图之前使用self.bounds设置UIView

将此添加到您的自定义override func layoutSubviews() { super.layoutSubviews() self.roundCorners([.topLeft,.topRight], radius: 20) } 类中:

viewDidLoad()

并从视图控制器的{{1}}函数中删除该调用。