子类 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) 绘制一个自定义单元格,更改颜色和分隔符颜色和宽度