保持UILabel以更改内容和AutoLayout为中心

时间:2013-03-15 23:28:52

标签: ios6 autolayout

我有2个观点。一个MapKitView和一个UILabel。自动布局已开启。

我希望MKView占据整个屏幕(这似乎工作正常)和UILabel保持距屏幕底部的自动距离但水平居中。 UILabel内容以编程方式更改,之后我调用sizeToFit

在UILabel上调用sizeToFit后,它不再居中 - 宽度似乎仅从右侧(后缘)调整,使左侧保持在一个恒定位置。

我的理解是,我应该能够通过在IB中设置正确的约束来实现我想要的目标吗?

我对标签应用的约束是:

Height Equals: 32
Width Equals: 166
Bottom Space to: Superview Equals: Default
Align Center X to: Map View

只有最后一个“Align Center X”是用户约束 - 其余的是IB提供的。

我已经尝试了很多东西,但没有太多理解(大概是我的问题!)。

我在标签上打了setTranslatesAutoresizingMaskIntoConstraints: NO。 我设置了标签autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin。我尝试将preferredMaxLayoutWidth设置为随机值。在标签上调用needsUpdateConstraints。我尝试在sizeToFit中拨打viewDidLayoutSubviews

我得出的结论是,我需要更多地了解我应该如何处理这个问题。当自动布局打开时,sizeToFit不是要调用的东西吗?调用sizeToFit后,是否需要以某种方式激活自动布局?我注意到旋转模拟器似乎使标签居中,所以刺激听起来有可能吗?

我已经重新阅读Apple Auto Layout guide,但我担心我仍然不确定我做错了什么,建议的调试技巧(visualizeConstraints等)似乎不适用于iOS。

感谢您提供的任何线索。

1 个答案:

答案 0 :(得分:2)

我对必须刺激的想法似乎是正确的。致电sizeToFit后,我需要致电[label.superview setNeedsLayout]。虽然这可行,但我不确定为什么我需要手动执行此操作,而不是在尺寸更改时将布局标记为脏的标签。