2015-07-20 77 views
4

我试图圆形的顶部和两个底部边框的UITextField四舍五入角落只影响左侧角落

结果在ViewDidLoad()

ViewDidLoad Result

结果在ViewDidAppear

ViewDidAppear Result

问题是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) 
+0

您是如何在StoryBoard中使用AutoLayout设置文本字段 – Aladin

+0

的? –

+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

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

+0

这实际上是你应该做的,如果你需要从其他地方更新UI主线程(例如下载图像)。你以前从哪里调用过该方法? –

+0

我一直在调用它 –

+0

我也必须这样做,使viewWillAppear中的变化没有做任何事情,并且在加载到'viewDidAppear'中的接口后看图像形成一个圆圈是绝对粘性的。感谢这个解决方案。 – Hobbyist

0

你” ll n EED有图层蒙板其边界

self.layer.masksToBounds = true

编辑:

使用&,而不是试用|,我相信这是只拿因为你使用或在第一个弯道。

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

没有工作仍然同样的问题@David Cao –

+0

啊,检查我的更新回答 –

+0

你在想我一样的想法:),我以前试过,但它没有任何角落:) :):D –

1

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

+0

与'ViewDidLoad'相同的结果查看更新后的问题,唯一的区别是'viewDidLayoutSubviews'工作正常,如果你旋转设备一次@Aladin –

+1

你的意思是'viewWillLayoutSubviews'? @Aladin –

+0

ViewControllers只有'viewWillLayoutSubviews'所以你的意思是,但不幸的是'ViewDidLoad'和'viewDidLayoutSubviews'@Aladin'@Aladin –