目前我正在编写一个事件 - UIViewController
,它具有三个 UITableViews
显示参与者、感兴趣的人和不能来的人。它们中的每一个都固定在标签下。
层次结构如下所示:
descriptionLabel
|surePeopleLabel
|surePeopleTV
|maybePeopleLabel
|maybePeopleTV
|nopePeopleLabel
|nopePeopleTV
现在我只想显示相关的 Labels 和 TableViews。例如,如果没有感兴趣的人,则不应显示关联的元素。
但这会导致一个问题:因为 nopePeopleLabel
的约束设置为从未添加的 maybePeopleTV
的 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: 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/