UICollectionViewCell 上的奇怪边框 - Swift
Posted
技术标签:
【中文标题】UICollectionViewCell 上的奇怪边框 - Swift【英文标题】:Strange Border on UICollectionViewCell - Swift 【发布时间】:2015-12-13 10:53:06 【问题描述】:我为 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
每个单元格的顶部和右侧都有一个奇怪的边框/阴影(故事板中设置的背景颜色)...
请注意,即使我取出 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】:我怀疑这可能只是一个出现的实现怪癖,因为您没有按照 Apple 想要的方式做事。除非你继承了UIView
,否则你应该在你自己的drawRect()
方法中调用super.drawRect()
。此外,drawRect()
并不是设置 cornerRadius
的正确位置:您应该设置一次,也许在创建单元格时,然后忘记它。
您可能会发现Apple's reference for UIView and drawRect 很有用:
如果你直接继承 UIView,你的这个方法的实现不需要调用 super.但是,如果您要对不同的视图类进行子类化,则应在实现中的某个时间点调用 super。
还有一件事:如果你可以避免覆盖drawRect()
,你应该这样做;它确实会对性能产生影响。
【讨论】:
谢谢 TwoStraws - 只是我需要的建议 - 我将 drawRect 函数换成了required init(coder aDecoder: NSCoder) super.init(coder: aDecoder)! self.layer.cornerRadius = 4
并且一切都按预期工作。正如 Rajan 所说,您的故事板方法也有效。谢谢大家!【参考方案2】:
我只能建议做一个小技巧: 将此行添加到drawRect
self.layer.borderWidth = 1
self.layer.borderColor = COLOR_OF_GRPUP_CELL
【讨论】:
感谢 Nerowolfe,不幸的是,这并没有达到预期的效果。更好 - 但右侧仍有少量黑色边框。似乎让它发挥作用的最好方法是在情节提要中设置值。以上是关于UICollectionViewCell 上的奇怪边框 - Swift的主要内容,如果未能解决你的问题,请参考以下文章
从笔尖创建的 UICollectionViewCell 中的奇怪 UIView
如果浮动大小,奇怪的 UICollectionViewCell 行为
将 UIButton 添加到 UICollectionViewCell 时的奇怪行为
UICollectionViewCell 奇怪的行为。单元格未正确更新图层