ios - 使用下一个上层对象的 anchor

标签 ios swift autolayout constraints anchor

目前我正在编写一个事件 - UIViewController,它具有三个 UITableViews 显示参与者、感兴趣的人和不能来的人。它们中的每一个都固定在标签下。 层次结构如下所示:

descriptionLabel | surePeopleLabel | surePeopleTV | maybePeopleLabel | maybePeopleTV | nopePeopleLabel | nopePeopleTV

现在我只想显示相关的 Labels 和 TableViews。例如,如果没有感兴趣的人,则不应显示关联的元素。

但这会导致一个问题:因为 nopePeopleLabel 的约束设置为从未添加的 maybePeopleTVbottomAnchor,程序崩溃。

有谁知道将 anchor 设置到下一个现有上方对象的(平滑)方法? 我添加了我的代码,尽管这不是必需的..

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)
}

最佳答案

var lowestObjAnchor: NSLayoutYAxisAnchor = descLabel.bottomAnchor

每次最低的 anchor 改变时覆盖这个属性,你会没事的。在代码中,这看起来像这样:

if let sureUsers = surePeopleTV.users, !sureUsers.isEmpty {
    scrollView.addSubview(surePeopleLabel)
    scrollView.addSubview(surePeopleTV)
    let sureTVHeight: CGFloat = CGFloat(sureUsers.count) * 60
    surePeopleLabel.anchor(top: lowestObjAnchor, 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)

    lowestObjAnchor = surePeopleTV.bottomAnchor
}

关于ios - 使用下一个上层对象的 anchor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52425171/

相关文章:

swift - 将 NSGridView 高度设置为其内容 View 的高度

swift - 将自动布局与框架初始化程序结合使用

swift - 检查用户是否已经注册

ios - UIButton 添加没有发件人的目标

ios - 如何为自动布局创建自定义类?

ios - 模拟器中未显示可重用/共享 View

objective-c - Objective-C : Gesture Issue

iphone - Xcode 突然没有将图像加载到我的 Storyboard中(蓝色问号)

ios - 具有不同 UI Swift 的行,并重用不同 View Controller 中的任何单元格以避免重复编码

iOS 在同一个 ViewController 下触摸具有相同父 View 的两个 View 时无法获取新的 touchEvent