ViewDidLoad 中 UITextField 的圆角仅影响左角

Rounding Corners of UITextField in ViewDidLoad only affects the left corners

我正在尝试圆化两个 UITextField 的顶部和底部边框

结果在ViewDidLoad()

结果在ViewDidAppear

问题是 ViewDidAppear 加载视图半秒后边框发生变化,这对我来说不太好,

有人知道为什么它只在 ViewDidLoad 方法中将左角圆化吗?

有什么建议吗?

*更新*

viewDidLayoutSubviews 等同于 ViewDidLoad

这是我用来圆角的代码

extension UITextField {
    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.masksToBounds = true
        self.layer.mask = mask
    }
}

self.FirstTextField.roundCorners(UIRectCorner.TopRight | UIRectCorner.TopLeft, radius: 10.0)
self.SecondTextField.roundCorners(UIRectCorner.BottomLeft | UIRectCorner.BottomRight, radius: 10.0)

您需要将图层蒙版限制在其范围内

self.layer.masksToBounds = true

编辑:

尝试使用 & 而不是 |,我相信自从您使用 or 后它只走了第一个角。

self.FirstTextField.roundCorners(UIRectCorner.TopRight & UIRectCorner.TopLeft, radius: 10.0)
self.SecondTextField.roundCorners(UIRectCorner.BottomLeft & UIRectCorner.BottomRight, radius: 10.0)

尝试将文本字段四舍五入的代码移动到 - (void)viewDidLayoutSubviews

我曾期望解决这个问题的一件事是在主队列上调度

dispatch_async(dispatch_get_main_queue(),{
      self.FirstTextField.roundCorners(UIRectCorner.TopRight | UIRectCorner.TopLeft, radius: 10.0)
      self.SecondTextField.roundCorners(UIRectCorner.BottomLeft | UIRectCorner.BottomRight, radius: 10.0)
});

现在我不知道这是否效率低下但它确实有效:D

如果谁有更好的答案请post吧:)