2016-09-16 48 views
0

隨着XCode 8,Swift 3和iOS10的最新更新,我用於舍入UIViews的舊模式變得過時了。我用做的是:舍入UIViews的好模式?

@IBOutlet weak var pointsView: UIView! { 
    didSet { 
     pointsView.setRound() 
    } 
} 

凡setRound被定義爲擴展名:

extension UIView { 
    func setRound() { 
     self.layer.cornerRadius = self.bounds.width/2 
    } 
} 

現在我不能再使用這種模式,因爲他們有正確的界限之前,網點置位。所以在幾乎所有情況下,bounds.width/2都大於實際bounds.width和視圖消失。

我真的很喜歡這種風格,因爲舍入被定義在UIView被設置的位置,並且所有其他基於圖層的樣式也被完成了。

所以現在我問你什麼是舍入?你爲什麼這樣做?

+0

您可以在「用戶定義的運行屬性」下的身份檢查器中添加屬性。將關鍵路徑設置爲「layer.cornerRadius」並將其值設置爲所需的角點。 –

+0

我不想在那裏定義它,因爲每次更改視圖大小時都必須更改值。 – dorjeozer

回答

1

請致電setRound功能從viewDidLayoutSubviews或佈局完成後。或者你應該選擇你的視角width constraint的插座,並設置角落半徑爲約束出口的constant的一半!

+0

我現在在做什麼(作爲一種創可貼)是我在viewDidAppear中調用了這個函數,我猜它和viewDidLayoutSubviews是一樣的。有了約束它可以工作,但是再次會有很多額外的代碼和麻煩來改變邏輯。 – dorjeozer

+0

事實上,它看起來像viewDidLayoutSubviews比viewDidAppear更好。感謝那!但仍然需要找出一個更優雅的方式來做到這一點。 – dorjeozer

+0

是啊'viewDidLayoutSubviews'比'viewDidAppear'好! – Lion