子类 uitableview 单元格以快速更改分隔符高度

Posted

技术标签:

【中文标题】子类 uitableview 单元格以快速更改分隔符高度【英文标题】:subclass uitableview cell to change separator height swift 【发布时间】:2018-07-14 23:06:09 【问题描述】:
import UIKit

class UISeparatorTableViewCell: UITableViewCell 

override func awakeFromNib() 
    super.awakeFromNib()
    setSeparator()
    // Initialization code


func setSeparator() 
    let separator = UIView(frame: CGRect(x: 8, y: bounds.height - 1, width: bounds.width - 16, height: 1))
    separator.backgroundColor = UIColor(white: 216/255, alpha: 100)
    addSubview(separator)


我正在编写 uitableviewcell 的子类以使其分隔符更厚。当出列可重用单元格但无法获得正确的单元格边界时,在 awakeFromNib 调用它不会导致任何分隔符的重新创建。我的意思是。 bounds.height 只是当前的故事板视图设备。如果我使用故事板视图作为 iphone X。使用 8plus 运行模拟器然后得到这个

bounds.height 和 width 与 iphone x 相同,但与 8plus 不同。 有没有办法解决这个问题

赞赏

【问题讨论】:

您是否使用约束来设计情节提要中的单元格? 您可能会遇到分隔符宽度的问题。尝试使用主屏幕宽度而不是bounds.width 【参考方案1】:

您需要使用自动布局来定位分隔符,或者更新它在layoutSubviews 中的位置。单元格在被添加到 UITableView 之前不会知道它的宽度是多少,这是在调用 awakeFromNib 之后的一段时间。

【讨论】:

【参考方案2】:

添加自定义分隔符的最佳方法是使用自动布局在界面生成器中添加UIView

awakeFromNib 单元格中没有设备的实际高度和宽度,因此它获得了您在界面构建器中使用的帧大小,因为单元格的帧在被调用时不会加载。您需要在layouSubView 方法中设置分隔符的大小(如果您仍想以编程方式进行)。每次发生与帧大小相关的更改时都会调用此方法

awakeFromNib 中添加子视图并在layoutSubview 中更新它的大小。因为layoutSubview 被多次调用,如果你在layoutSubview 中添加分隔符,分隔符将添加多次。

【讨论】:

以上是关于子类 uitableview 单元格以快速更改分隔符高度的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 动画在部分之间滚动,同时临时删除过多的单元格以简化动画

为 tableview (UITableView) 绘制一个自定义单元格,更改颜色和分隔符颜色和宽度

UITableView 分隔符在错误的位置

Excel - 编程单元格以根据另一个单元格更改颜色

带有静态单元格的 UITableView - 每个部分的分隔颜色不同?

自定义表格单元格以显示图像