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

UITableView's height its content with Auto Layout but limit UITableView height

我在 UIViewController 中有一个 UITableViewUIButton

UIViewController -> UIView -> UITableView
                           -> UIButton

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

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

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

约束你的按钮:

  • 距 tableView 底部 25 点
  • bottom lessThanOrEqualTo -25 pts from view bottom (safe-area)

为您的 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 磅的位置,当您更改 tableViewHeight.constant 时,它会“按下按钮”,但仅当它距 tableView 底部 25 磅时视图(安全区域)。

作为旁注,养成使用 Points 而不是 Pixelsview 的习惯宽度 而不是 屏幕宽度 .


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

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