在 TableView 中隐藏 UIView 并更新约束

Hide UIView inside TableView and update constraints

我有自定义的 tableview 单元格,它下面有 UITextView 和 UIView。 TextView 使用 sizeToFit 方法根据内容调整它的高度。视图具有固定高度。单元格高度正在改变以适合内容。细胞显示正常。

我想要的是在我的一些单元格中隐藏视图。 Bu 不仅将它的 hidden 属性 设置为 true 还调整了 cell 的高度。

为了让您的生活更轻松(如果您使用的是 iOS 9 及更高版本),请在您的自定义单元格中使用 UIStackView

现在,以下步骤用于让您的 UITableViewCell 自动调整 UITextView

的高度
  1. 在您的控制器的 viewDidLoad() 方法中添加此设置,并根据您的 UITableView.

    的需要进行修改
    self.tableView.estimatedRowHeight = 150
    self.tableView.rowHeight = UITableViewAutomaticDimension
    
  2. 实施 UITextViewDelegate 并确保将 textView 的委托设置为自身。

    // MARK: - TextView Delegate
    
    extension YourController: UITextViewDelegate {
    
        func textViewDidChange(_ textView: UITextView) {
            let currentOffset = self.tableView.contentOffset
            UIView.setAnimationsEnabled(false)
            self.tableView.beginUpdates()
            self.tableView.endUpdates()
            UIView.setAnimationsEnabled(true)
            tableView.setContentOffset(currentOffset, animated: false)
        }
    }
    
  3. 最后,关闭 textView 的水平和垂直滚动指示器。

然后,要切换单元格中任何视图的可见性,只需切换它并重新加载您的 tableView。

你说你的视图有固定的高度?因此,如果它具有高度限制,请向其添加 IBOutlet。

当您想隐藏视图时,只需将其常量设置为零即可。

heightConstraint.constant = 0;