2015-07-20 76 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 –