使用AutoLayout将UIView调整为离散值

时间:2018-02-02 06:57:42

标签: ios uiview autolayout ios-autolayout

短版本是这样的:如果有足够的空间我需要我的UIView宽度为50,否则我需要0. 我该怎么做?

现在是长版:

我有一个带有图标后跟标签的UIView,理想情况下,视图总是看起来像|-icon-label-|

然而有时标签太长而且必须给出一些东西。我需要图标完全消失(例如将其大小设置为零),而不是调整大小/截断文本或调整图标大小。

我希望通过以下方式实现这一目标:

  1. 将图标的水平抗压力设置为低于标准的值(比如700)
  2. 在图标的宽度约束上设置可选的高优先级(例如width = 50,priority = 900)
  3. 在图标的宽度约束(宽度= 0,优先级= 800)
  4. 上设置较低的优先级

    通过这种设置,我希望约束#2会随着标签变长而破坏,并且约束#3将被用作合适的后备。然而,这并不是autolayout显然如何工作:图标视图只是稍微调整大小(缩小),但并不完全消失。换句话说。约束#3被忽略了。

    必须有一个合理的方法来做到这一点?我错过了什么?

1 个答案:

答案 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
}

这里我假设containerViewlabelicon的超级视图,并且它已经被放入视图层次结构中并进行了布局(此时我们必须知道{ {1}})。