2015-12-13 52 views
0

我已经创造了一个UICollectionViewCell,它看起来像这样子类...奇怪的边境 - 斯威夫特

import Foundation 
import UIKit 
class GroupCollectionViewCell: UICollectionViewCell { 
    @IBOutlet weak var name: UILabel! 
    @IBOutlet weak var subject: UILabel! 
} 

只要我重写像这样的drawRect函数...

override func drawRect(rect: CGRect) { 
    self.layer.cornerRadius = 4 
} 

我得到的每一个单元的顶部和右侧(背景颜色设置故事板),一个奇怪的边界/阴影...

Border on top and right of each cell

请注意,即使我拿出self.layer.cornerRadius线,边框仍然出现,所以大概我已经错过了drawRect函数的东西 - 我只是不知道是什么。

这是什么让这特别奇怪,是当我在iPhone 6+或更宽的设备上运行代码时,问题就消失了。

其他唯一的(大概)相关的代码,是我在视图控制器适当地使用大小的细胞:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    let size = collectionView.frame.width 
    return CGSize(width: (size/3)-8, height: (size/3)-8) 
} 

什么是灰色边框/阴影,我怎么能摆脱它?提前谢谢了!

回答

1

我怀疑这可能只是一个实现的怪癖,因为你不像苹果想要的那样做事。除非您继承了UIView,否则您应该在您自己的drawRect()方法中致电super.drawRect()。此外,drawRect()并不是真正适合设置cornerRadius的地方:您应该设置一次,也许在创建单元格时忽略它。

您可能会发现Apple's reference for UIView and drawRect有用:

如果直接继承UIView的,你的这种方法的实现并不需要调用超。但是,如果您要继承不同的视图类,则应在实现中的某个位置调用super。

还有一件事:如果你可以避免重写drawRect()你应该;它确实会对性能产生影响。

+1

你也可以在在的keyPath故事板本身.. –

+0

谢谢TwoStraws - 只是意见,我所需要的 - 我换了drawRect函数用于所需的init(编码器aDecoder:NSCoder){super.init(coder:aDecoder)! self.layer.cornerRadius = 4 }'并且按预期工作。正如Rajan所说,你的故事板方法也起作用。多谢你们! – Ben

1

我只能建议做一点黑客: 添加此行的drawRect

 self.layer.borderWidth = 1 
     self.layer.borderColor = COLOR_OF_GRPUP_CELL 
+0

感谢Nerowolfe,不幸的是,这并没有像希望的那样工作。这比较好 - 但右侧仍有少量黑色边框。看起来最好的方法是设置故事板中的值。 – Ben