UITableView 的高度与自动布局的内容但限制 UITableView 高度

问题描述

我在 UITableView 中有 UIButtonUIViewController

UIViewController -> UIView -> UITableView
                           -> UIButton

UITableView 高度设置为根据其内在内容大小进行相应更改。当 UITableView 中有更多行数时,高度会增加,但我不想增加 UIButton 不可见。我不想在那个 UIScrollView 中有 UIViewController。 UIButton 的约束设置为距底部 25 像素,距 UITbaleView 25 像素,宽度设置为屏幕宽度的 70%。我将 UITableView 的约束设置为距顶部 10 像素,宽度与超级视图相同,高度设置为 590。我不确定如何设置优先级,以便即使 UITableView 中的行数更多,UIButton 也会可见。

我使用下面的代码增加 UITableView 的高度

override func updateViewConstraints() {
        tableViewHeight.constant = TableIb.contentSize.height
        super.updateViewConstraints()
    }

解决方法

限制按钮:

  • 距 tableView 底部 25 点
  • 底部小于或等于 -25 点距视图底部(安全区域)

为您的 tableViewHeight 约束设置小于要求的优先级。

例如:

    button.topAnchor.constraint(equalTo: tableView.bottomAnchor,constant: 25.0).isActive = true
    button.bottomAnchor.constraint(lessThanOrEqualTo: view.safeAreaLayoutGuide.bottomAnchor,constant: -25.0).isActive = true
    
    // whatever you want to start your tableView height at...
    //  it doesn't really matter,as I assume you'll be immediately
    //  changing its .constant value
    tableViewHeight = tableView.heightAnchor.constraint(equalToConstant: 30.0)
    tableViewHeight.priority = .defaultHigh
    tableViewHeight.isActive = true

按钮将从 tableView 底部“粘住” 25 pts,当您更改 tableViewHeight.constant 时,它将“按下按钮”但仅直到它离视图底部 25 pts (安全区)。

作为旁注,养成用代替像素,用视图宽度代替的习惯屏幕宽度


或者,将您的按钮嵌入到 UIView 中并将该视图设置为 viewForFooterInSection。它将“粘”到 tableView 的底行,但在 tableView 需要滚动时保持可见。

这将使您无需不断调整 tableView 的大小。