uilabel - 如何使用自动布局创建一个根据 UILabel 的内容扩展高度的布局

标签 uilabel ios6 autolayout

我正在尝试使用 iOS 6.0 中新的自动布局 api 构建动态布局。我尝试构建的布局有 2 个按钮,它们之间有一个标签,如下图所示:

enter image description here

我想要的是以灰色显示的容器 View 根据标签中的文本量增加或减小大小。

到目前为止,我已经设法让布局完全按照描述工作,但有一个我无法解决的小问题。我遇到的问题是,标签的固有高度始终是根据标签的原始宽度(例如界面生成器中设置的宽度)计算的,而不是根据我对其施加的约束设置的标签宽度。

我对 View 的限制如下:

  • H:|-[左按钮]-[标签]-[右按钮]-|
  • 两个按钮均垂直居中
  • V:|-[标签]-|
  • 按钮的内容拥抱优先级高于标签
  • 标签的抗压能力高于容器 View

所有这些约束共同创建所需的布局。

但是:

  • 如果界面构建器中标签的宽度(界面构建器中的文字大小)小于运行时 View 的宽度,则容器的高度太大。

enter image description here

为了帮助澄清这一点,上述布局的 IB View 如下(注意更窄)

enter image description here

  • 如果界面构建器中标签的宽度(界面构建器中的文字大小)大于运行时 View 的宽度,则容器的高度太小,文本行会被截断。<

似乎发生的情况是,虽然标签宽度没有限制,但标签似乎根据创建标签时的原始宽度来计算其高度(以及自动布局计算容器的高度) 。然而,奇怪的是,文本似乎具有正确的宽度和高度,但标签本身的框架太大或太小。

我猜这与事情发生的顺序有关,并尝试在containerViews的layoutSubview方法中调用updateConstraintsIfNeeded,但这似乎没有做任何事情。

如有任何建议,我们将不胜感激。

最佳答案

也许我迟到了,但无论如何我已经找到了解决方案。每当标签宽度发生更改时,您都需要手动更新标签的preferredMaxLayoutWidth。例如:

Label.preferredMaxLayoutWidth = 200;

界面构建器使用初始标签宽度设置preferredMaxLayoutWidth。 希望这会有所帮助。

关于uilabel - 如何使用自动布局创建一个根据 UILabel 的内容扩展高度的布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12530495/

相关文章:

ios - 如何在 UILabel 文本上设置边缘样式

ios - UIStackView 比例布局,仅具有内在内容大小

ios - UITableView 在状态栏消失时调整顶部 Y 位置

iOS AutoLayout 工作出现问题

ios - authPlayerWithCompletionHandler 已弃用,那么我该如何使用 authenticateHandler

iphone - dismissViewControllerAnimated :completion: has a couple second delay

ios - UIView transitionWithView 和 UILabel 在过渡期间失去圆角

ios - 如何限制 UILabel 的最大宽度?

ios - 如何实现清晰渲染的旋转 UILabel?

iphone - iOS - 升级到 Xcode 4.5 后链接器错误,Core Plot 相关?