@Kevin的评论已经回答了这个问题。我没有打电话给layoutSubviews
。
所有内容都是以编程方式创建的。没有什么是通过故事板完成的。这是tableView代码的精简版本:
func configure(cell: UITableViewCell, for indexPath: IndexPath) {
guard let cell = cell as? HistoryTableViewCell else {
return
}
// I set up the cells various properties here.
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: historyCellIdentifier, for: indexPath) as! HistoryTableViewCell
configure(cell: cell, for: indexPath)
return cell
}
这是我的UITableViewCell的精简版:
class HistoryTableViewCell: UITableViewCell {
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:)")
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.backgroundColor = UIColor.blue
let test = UIView(frame: CGRect(x: 0, y: 0, width: self.frame.width, height: 10))
test.backgroundColor = UIColor.black
self.addSubview(test)
}
override func prepareForReuse() {
super.prepareForReuse()
}
}
注意我将测试视图宽度设置为self.frame.width。产生这个:
在HistoryTableViewCell中打印self.frame.width会产生320,这是iPhone 5s的宽度。知道为什么吗?我假设它是像我之前创建单元格所以它默认为最小尺寸。
另一件奇怪的事情是,如果我尝试将测试视图center.x设置为self.center.x,它会保留在我认为奇怪的地方,因为背景颜色显示单元格是屏幕的宽度。
由于
答案 0 :(得分:0)
除非您不想使用autolayout或autoresizingmaske,否则请将UI组件作为属性并在layoutSubview中更新其框架。
class HistoryTableViewCell: UITableViewCell {
let test = UIView()
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:)")
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.backgroundColor = UIColor.blue
self.test.backgroundColor = UIColor.black
self.contentView.addSubview(test)
}
override func prepareForReuse() {
super.prepareForReuse()
}
}
override func layoutSubviews() {
super.layoutSubviews()
test.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: 10)
}