2015-10-10 90 views
1

我正在嘗試爲我在故事板中創建的UITableViewCell創建一個圓角矩形。我在Xcode 7中使用Swift 2。我在原型單元格中有兩個視圖,topView和Bottom視圖。我想讓topView的頂角變圓,而bottomView的角變圓。在Swift中使用UIRectCorner的圓角矩形不起作用

在awakeFromNib

(可以去別的地方更好更高版本):

... 
self.topView.backgroundColor = UIColor.redColor() 
self.bottomView.backgroundColor = UIColor.grayColor() 

self.setMaskToView(self.topView, corners:UIRectCorner.TopLeft.union(UIRectCorner.TopRight)) 
self.setMaskToView(self.bottomView, corners: UIRectCorner.BottomLeft.union(UIRectCorner.BottomRight)) 
... 

在單獨的函數(基於回答另一個堆棧溢出後):

func setMaskToView(view : UIView, corners: UIRectCorner) { 
    let rounded = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: 10, height: 10)) 
    let mask = CAShapeLayer() 

    mask.path = rounded.CGPath 
    view.layer.mask = mask 
} 

注意,我也嘗試過[ .TopRight,.TopLeft]代替union(),基於各種其他堆棧溢出帖子。似乎沒有任何改變。也絕望地清理並重新啓動Xcode。這就是我得到:

Top Cell Shows issue. Only .TopLeft seems to be applied, even though it is called on two separate views

如果任何人有可能是什麼的任何想法,我將不勝感激。

謝謝。

+0

看到我的答案在這裏:http://stackoverflow.com/a/40222533/2594699 –

回答

2

你有兩個問題。

  1. awakeFromNib太早做基於視圖界限什麼,因爲意見沒有被調整爲在該點的設備。您應該在awakeFromNib中創建遮罩層,但您應該在layoutSubviews中設置它們的路徑。您需要使用view.bounds而不是self.bounds來創建路徑。

+0

是的,我看了幾十次,並沒有看到它。謝謝 –