ViewDidLoad中的UITextField的舍入角仅影响左角

时间:2015-07-20 15:20:44

标签: ios swift autolayout uitextfield viewdidload

我正在尝试围绕两个UITextField的顶部和底部边框

ViewDidLoad()

中的结果

ViewDidLoad Result

ViewDidAppear

中的结果

ViewDidAppear Result

问题是ViewDidAppear在加载视图半秒后使边框发生变化,这对我的情况不利,

任何人都知道为什么它只围绕ViewDidLoad方法的左角?

有什么建议值得赞赏吗?

*更新*

viewDidLayoutSubviewsViewDidLoad

相同

这是我用来围绕角落的代码

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)

3 个答案:

答案 0 :(得分:5)

我曾经期望解决的一件事是在主队列上发送

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

如果有任何人有更好的答案请发布:)

答案 1 :(得分:1)

尝试将文本字段的舍入代码移至- (void)viewDidLayoutSubviews

答案 2 :(得分:0)

您需要将图层蒙版设置为其边界

self.layer.masksToBounds = true

编辑:

尝试使用&而不是|,我相信自从你使用或之后它只需要第一个角落。

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