具有子视图的自定义TableViewCell,其高度发生变化

时间:2015-05-18 17:11:52

标签: xcode uitableview swift xcode6 tableview

我正在使用TableView,并且我已经添加了一个子视图的自定义TableViewCell。

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

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

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

  1. 加载 enter image description here

  2. 导致子视图高度增加的事件发生后 enter image description here

  3. 采用这样的方法最好的方法是什么?

    我应该使用约束吗?如果是这样,我应该使用什么样的约束?每次子视图的大小改变时,我是否还要重新加载tableview?

    以下是我目前用于自定义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
        }
    }
    

1 个答案:

答案 0 :(得分:4)

最好的方法是使用自动布局和自定义单元格。在自定义单元格的故事板中设置约束。

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

有关详细信息,请参阅smileyborganswer在UITableView中使用自动布局进行动态单元格布局的详细演练。可变行高