使用下一个上层对象的锚点
Use anchor from the next upper object
目前我正在编写一个事件-UIViewController
,其中有三个 UITableViews
显示参与者、感兴趣的人和不能来的人。它们中的每一个都固定在标签下。
层次结构如下所示:
descriptionLabel
| surePeopleLabel
| surePeopleTV
| maybePeopleLabel
| maybePeopleTV
| nopePeopleLabel
| nopePeopleTV
现在我只想显示相关的Labels和TableViews。例如,如果没有感兴趣的人,则不应显示关联的元素。
但这会导致一个问题:因为 nopePeopleLabel
的约束设置为从未添加的 maybePeopleTV
的 bottomAnchor,所以程序崩溃。
有谁知道将锚点设置到下一个现有上方对象的(平滑)方法?
我添加了我的代码,尽管这不是必需的..
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
每当最低锚点发生变化时覆盖此 属性,你会没事的。在代码中,它看起来像这样:
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
}
你想多了。
不要删除任何对象(标签或 table 视图)。相反,只需将它们的高度(以及中间的间距约束)更改为零。如果每个 label-table 对都在一个超级视图中,然后可以根据需要进行调整,这实际上是最简单的。
或者,使用堆栈视图。它会在您隐藏和显示视图时自动处理视图,为您调整约束。
目前我正在编写一个事件-UIViewController
,其中有三个 UITableViews
显示参与者、感兴趣的人和不能来的人。它们中的每一个都固定在标签下。
层次结构如下所示:
descriptionLabel
|surePeopleLabel
|surePeopleTV
|maybePeopleLabel
|maybePeopleTV
|nopePeopleLabel
|nopePeopleTV
现在我只想显示相关的Labels和TableViews。例如,如果没有感兴趣的人,则不应显示关联的元素。
但这会导致一个问题:因为 nopePeopleLabel
的约束设置为从未添加的 maybePeopleTV
的 bottomAnchor,所以程序崩溃。
有谁知道将锚点设置到下一个现有上方对象的(平滑)方法? 我添加了我的代码,尽管这不是必需的..
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
每当最低锚点发生变化时覆盖此 属性,你会没事的。在代码中,它看起来像这样:
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
}
你想多了。
不要删除任何对象(标签或 table 视图)。相反,只需将它们的高度(以及中间的间距约束)更改为零。如果每个 label-table 对都在一个超级视图中,然后可以根据需要进行调整,这实际上是最简单的。
或者,使用堆栈视图。它会在您隐藏和显示视图时自动处理视图,为您调整约束。