ios - 以编程方式设置约束不适用于我的表格视图
问题描述
我的 UItableView 有这些约束(来自情节提要):
musicHomeTableView.translatesAutoresizingMaskIntoConstraints = false
musicHomeTableView.topAnchor.constraint(equalTo: view.topAnchor ).isActive = true
musicHomeTableView.bottomAnchor.constraint(equalTo: mainTabBar.topAnchor).isActive = true
musicHomeTableView.widthAnchor.constraint(equalToConstant: view.frame.width).isActive = true
上面的代码是从中调用的viewDidLoad
,它工作正常。然而,当我稍后尝试执行此代码时:
musicHomeTableView.bottomAnchor.constraint(equalTo: playerView.topAnchor).isActive = true
什么都没发生。mainTabBar
并且playerView
都是以编程方式设置的视图和视图的子视图。
我试过view.layoutSubviews()
了view.layOutIfNeeded()
解决方案
musicHomeTableView
已经有bottomAnchor
约束了。在将另一个约束添加到同一个锚之前,您需要删除此约束。为同一个锚设置另一个约束不会删除旧约束。
class ViewController {
var musicHomeTableViewBottomAnchorConstraint: NSLayoutConstraint?
func viewDidLoad() {
musicHomeTableViewBottomAnchorConstraint = musicHomeTableView.bottomAnchor.constraint(equalTo: view.topAnchor)
musicHomeTableViewBottomAnchorConstraint!.isActive = true
}
func addNewConstraint() {
if let constraint = musicHomeTableViewBottomAnchorConstraint {
constraint.isActive = false
}
// Add new constraint here
}
}
还有其他方法可以做到这一点,但这是其中之一。
推荐阅读
- javascript - 使用jQuery动画填充进度条?
- android - 如何在Android的BottomNavigationView中隐藏一个按钮
- javascript - 如何根据值将整数转换为特定字符串
- pandas - 识别 PySpark DF ArrayType 列上运行的干净方法
- python - 如何在 MacOS Catalina 上以管理员身份运行 Anaconda?
- jupyter-notebook - 在使用 jupyter notebook 时,我得到了 CERTIFICATE_VERIFY_FAILED
- reactjs - 问题回复:customHooks、setTimeout 闭包和 useSelector
- python - 使用 openpyxl 使用计数器循环遍历 excel 文件中的列
- css - 翻转时钟 CDN 不会影响覆盖样式
- json - 使用 django 管理操作将 csv 转换为 json