2015-10-10 83 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

是的,我看了几十次,并没有看到它。谢谢 –