2

我有 2 个视图。一个 MapKitView 和一个 UILabel。自动布局已打开。

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

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

我的理解是,我应该能够通过在 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 指南,但恐怕我仍然不确定我做错了什么,并且建议的调试技巧(visualizeConstraints 等)似乎在 iOS 上不起作用。

感谢您提供任何线索。

4

1 回答 1

2

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

于 2013-03-16T22:19:43.913 回答