ios - 使用下一个上层对象的锚点
问题描述
目前我正在编写一个事件——UIViewController
其中包含三个UITableViews
显示参与者、感兴趣的人和不能来的人。它们中的每一个都锚定在标签下方。层次结构如下所示:
descriptionLabel
|surePeopleLabel
|surePeopleTV
|maybePeopleLabel
|maybePeopleTV
|nopePeopleLabel
|nopePeopleTV
现在我只想显示相关的标签和表格视图。例如,如果没有感兴趣的人,则不应显示关联的元素。
但这会导致一个问题:因为nopePeopleLabel
' 的约束设置为从未添加过的 ' 的底部锚点,所以程序崩溃了。maybePeopleTV
有谁知道将锚点设置到下一个现有上部对象的(平滑)方法?即使没有必要,我也添加了我的代码..
if let sureUsers = surePeopleTV.users, !sureUsers.isEmpty {
scrollView.addSubview(surePeopleLabel)
scrollView.addSubview(surePeopleTV)
let sureTVHeight: CGFloat = CGFloat(sureUsers.count) * 60
surePeopleLabel.anchor(top: descLabel.bottomAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 20, paddingLeft: padding, paddingBottom: 0, paddingRight: padding, width: 0, height: 0)
surePeopleTV.anchor(top: surePeopleLabel.bottomAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 5, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: sureTVHeight)
}
if let maybeUsers = maybePeopleTV.users, !maybeUsers.isEmpty {
scrollView.addSubview(maybePeopleLabel)
scrollView.addSubview(maybePeopleTV)
let maybeTVHeight: CGFloat = CGFloat(maybeUsers.count) * 60
maybePeopleLabel.anchor(top: surePeopleTV.bottomAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 20, paddingLeft: padding, paddingBottom: 0, paddingRight: padding, width: 0, height: 0)
maybePeopleTV.anchor(top: maybePeopleLabel.bottomAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 5, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: maybeTVHeight)
}
if let nopeUsers = nopePeopleTV.users, !nopeUsers.isEmpty {
scrollView.addSubview(nopePeopleLabel)
scrollView.addSubview(nopePeopleTV)
let nopeTVHeight: CGFloat = CGFloat(nopeUsers.count) * 60
nopePeopleLabel.anchor(top: maybePeopleLabel.bottomAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 20, paddingLeft: padding, paddingBottom: 0, paddingRight: padding, width: 0, height: 0)
nopePeopleTV.anchor(top: nopePeopleLabel.bottomAnchor, left: view.leftAnchor, bottom: scrollView.bottomAnchor, right: view.rightAnchor, paddingTop: 5, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: nopeTVHeight)
}
解决方案
你多虑了。
不要删除任何对象(标签或表格视图)。相反,只需将它们的高度(以及中间的间距约束)更改为零。如果每个标签表对都在一个超级视图中,那么这实际上是最简单的,然后可以根据需要进行调整。
或者,使用堆栈视图。它会在您隐藏和显示视图时自动处理视图,为您调整约束。
推荐阅读
- firebase - 未找到试图访问 my-app.firebaseapp.com 的站点
- javascript - 在 .map() 中解决承诺/执行异步操作
- r - R Markdown 图片标题未显示
- python - 无法在 Colab 中安装 scikit-learn-intelex
- c# - C# - 在控制台应用程序中重新创建战舰。在这种情况下我在哪里调用方法?
- go - 如何修改 Go 包的源代码
- python - 如何合并在熊猫中共享相同索引值的列?
- c++ - 在我的 Qt 应用程序中打开某些链接
- python - 使用 GraphWidget 在 aws-cdk python 中绘制现有的 Lambda 指标
- javascript - 在使此函数返回承诺时遇到问题