以编程方式将子视图添加到自定义UITableViewCell

时间:2018-07-23 13:45:03

标签: ios swift uitableview frame

我有自定义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,假定子视图的高度只是屏幕的一部分,但实际上它大于整个单元格的高度。 crateThumbtableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)中被调用。

1 个答案:

答案 0 :(得分:0)

由于您提到crateThumbtableView(_ 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
}