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 奇怪的行为。单元格未正确更新图层

UICollectionViewCell 中的 UILabel 布局怪异

在 UICollectionViewCell 中添加模糊