我有自定义UITableViewCell
,并添加了几个子视图。我正在使用Auto Layout
。我需要在单元格中添加另一个子视图,但不使用Auto Layout
(这样我就可以使用pan gesture
左右移动)。当我添加它时,它得到的高度错误(大于所需高度)。我也在检查单元格的高度,它小于contentView
的高度。这是我的代码:
class IntervalCell: UITableViewCell {
override func awakeFromNib() {
super.awakeFromNib()
}
func createThumb() {
let height = self.frame.size.height - 20
let width = height * 0.7
let originY: CGFloat = 0
let originX = sliderView.frame.origin.x - width / 2
let thumbFrame = CGRect(x: originX, y: originY, width: width, height: height)
let testView = UIView(frame: thumbFrame)
testView.backgroundColor = .red
self.contentView.addSubview(testView)
}
}
由于let height = self.frame.size.height - 20
,假定子视图的高度只是屏幕的一部分,但实际上它大于整个单元格的高度。 crateThumb
在tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
中被调用。
答案 0 :(得分:0)
由于您提到crateThumb
在tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
中被调用,这意味着您的UITableViewCell
子类尚未按autolayout
进行大小调整,因此您的cell
具有高度让我们说44
,当调用crateThumb
时,但是当单元格的大小只有高度30
px时,因此您的testView
将会太大。
您可以执行以下操作:
1)在调用``crateThumb()`
之前先调用cell.layoutIfNeeded()
2)在您的layoutSubviews()
override func layoutSubviews() {
super.layoutSubviews()
let thumbView = ...//somehow get your thumb view and change its height/width
}
注意:要获取thumbView,可以向子类添加属性或为其分配自定义标签:
let testView = UIView(frame: thumbFrame)
testView.tag = 100
然后您可以通过以下方式获得它:
if let thumbView = contentView.viewWithTag(100) {
//modify thumbViews height/width
}