首页 > 解决方案 > 使用下一个上层对象的锚点

问题描述

目前我正在编写一个事件——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)
}

标签: iosswiftautolayoutconstraintsanchor

解决方案


你多虑了。

不要删除任何对象(标签或表格视图)。相反,只需将它们的高度(以及中间的间距约束)更改为零。如果每个标签表对都在一个超级视图中,那么这实际上是最简单的,然后可以根据需要进行调整。

或者,使用堆栈视图。它会在您隐藏和显示视图时自动处理视图,为您调整约束。


推荐阅读