【问题标题】:Add subview to custom UITableViewCell programatically以编程方式将子视图添加到自定义 UITableViewCell
【发布时间】:2018-07-23 13:45:03
【问题描述】:

我有自定义 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) 中调用。

【问题讨论】:

  • 可以使用自动布局,即使您想使用平移手势移动视图。这对调整大小有很大帮助,并且可以更轻松地处理大小变化(例如设备旋转)。
  • 如果你需要在 didSelect 里面,那么它应该有正确的 frame ,还要设置 clipsToBounds = true
  • @DonMag 是的。我想我可以将它与Auto Layout 一起使用。我之前遇到过问题,但我正在进行转换并更新图像。 (这个:stackoverflow.com/questions/49280086/…)。但是现在我只需要向左或向右移动它,所以它可能会受到约束。谢谢

标签: ios swift uitableview frame


【解决方案1】:

因为你提到crateThumbtableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 中被调用,这意味着你的UITableViewCell 子类还没有被autolayout 调整大小,因此你的cell 有高度让我们说44crateThumb 是被调用,但是当单元格被调整大小时,它的高度只有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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    相关资源
    最近更新 更多