【问题标题】:Custom TableViewCell with Subview whose height changes具有高度变化的子视图的自定义 TableViewCell
【发布时间】:2015-07-30 07:24:33
【问题描述】:

我正在使用 TableView 并有一个自定义的 TableViewCell,我已向其中添加了一个子视图。

问题是我有时需要更改子视图的高度,因此必须更新表的 contentView 以及行的高度。

自定义TableViewCell的子视图用黄色背景表示。

这些图像显示了我的模拟器中当前正在发生的事情。

  1. 加载时

  2. 导致子视图高度增加的事件之后

处理此类问题的最佳方法是什么?

我应该使用约束吗?如果是这样,我应该使用什么样的约束?每次子视图的大小发生变化时,我是否也必须重新加载表格视图?

这是我目前用于自定义 TableViewCell 的代码:

import UIKit

class CustomCell: UITableViewCell {

    var newView: UIView!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        self.newView = UIView(frame: self.frame)
        self.newView.backgroundColor = .yellowColor()
        self.addSubview(newView)
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        self.newView.frame.size.width = self.frame.size.width // because self.frame.width is different than it was in the init method
   }

    func somethingHappenedThatMySubviewHasToIncreaseInHeight() {
        self.newView.frame.size.height = self.frame.size.height + 40
    }
}

【问题讨论】:

    标签: xcode uitableview swift xcode6 tableview


    【解决方案1】:

    最好的方法是使用自动布局和自动调整单元格。在情节提要中为您的自定义单元设置约束。

    您不需要重新加载 tableView。每个单元格将根据其子视图占用的垂直空间自动调整其高度。

    有关更多信息,请参阅smileyborg 在其answer 中的详细演练,以在 UITableView 中使用自动布局实现动态单元格布局和可变行高

    【讨论】:

    • 是的,我下载了他的自定义 tableviewcell 项目 (github.com/smileyborg/TableViewCellWithAutoLayoutiOS8.git) 并尝试修改他的自定义 TableViewCell,以便它使用 UIView 作为 UITableViewCell 的子视图(并且高度是动态的),但没有运气到目前为止:(
    • 你的视图是否设置了它的intrinsicContentSize? 它必须告诉它的superView(tableView的contentView)它的高度是多少,这样Auto Layout才能正确调整contentView的大小,然后调整单元格的高度。
    • 我没有,但我不确定我是否应该用我正在采取的方法来做到这一点。我已经将我现有的代码上传到了 github,所以你可以看看。我正在使用smileyborg 的项目进行修改以添加动态UIView 子视图。但是,当我调用 self.newView.frame.size.height = 400 时,它似乎并没有将 tableview 单元格拉伸出来。 github.com/thomasbaldwinj/…
    • 设置内在尺寸是自动布局所期望的。当它去布局单元格时,它要求子视图进行布局。每个 subView 都必须知道它需要多少空间。然后单元格知道它的高度,因为现在只有一个高度可以满足约束。您绝对不想在使用自动布局时更改框架。自动布局是框架的替代品。
    • 这是一篇很棒的文章,它解释了布局、约束和 layoutSubviews。 objc.io/issue-3/advanced-auto-layout-toolbox.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多