短版本是这样的:如果有足够的空间我需要我的UIView宽度为50,否则我需要0. 我该怎么做?
现在是长版:
我有一个带有图标后跟标签的UIView,理想情况下,视图总是看起来像|-icon-label-|
然而有时标签太长而且必须给出一些东西。我需要图标完全消失(例如将其大小设置为零),而不是调整大小/截断文本或调整图标大小。
我希望通过以下方式实现这一目标:
通过这种设置,我希望约束#2会随着标签变长而破坏,并且约束#3将被用作合适的后备。然而,这并不是autolayout显然如何工作:图标视图只是稍微调整大小(缩小),但并不完全消失。换句话说。约束#3被忽略了。
必须有一个合理的方法来做到这一点?我错过了什么?
答案 0 :(得分:1)
长话短说:您必须根据标签的宽度以编程方式更改自动布局的宽度。
有点长版本:
在icon
的宽度上只设置一个约束并保留对它的引用:
let iconWidthConstraint = icon.widthAnchor.constraint(equalToConstant: 50)
iconWidthConstraint.isActive = true
然后,当您检索文本并将其设置为标签时,您必须检测是否需要隐藏icon
,如果是,则只需将其常量更改为零。如下所示:
label.text = yourText
if label.intrinsicContentSize.width + 50 < containerView.bounds.width {
iconWidthConstraint.constant = 50
} else {
iconWidthConstraint.constant = 0
}
这里我假设containerView
是label
和icon
的超级视图,并且它已经被放入视图层次结构中并进行了布局(此时我们必须知道{ {1}})。