【问题标题】:Interface Builder iOS 7 Autolayout Creates Label Too TallInterface Builder iOS 7 自动布局创建标签太高
【发布时间】:2014-01-25 11:32:05
【问题描述】:

我在 iOS 7 中使用 XCode 5 的自动布局。我设置了一个 UILabel,其中包含用于引导空间到超级视图(即 UIScrollView)、顶部空间到图像视图以及底部空间到超级视图的约束这会导致标签根据内容调整大小并指示滚动视图的内容大小——这是完美的。但是,每当设备旋转到纵向位置时,UILabel 的宽度都会扩大(我想要),但不再需要那么多的垂直空间...... Superview 的底部空间(eq:81 pts)会创建一个太高的 UILabel因为它的内容,并且没有顶部垂直对齐,内容垂直居中。有没有办法自动处理这个问题,还是我需要手动将底部空间扩展到设备旋转的超级视图?

界面生成器:http://cl.ly/image/2r1a3H1U2r0Rhttp://cl.ly/image/2o2A3I44353a

肖像:http://cl.ly/image/060p2Z0L3S0D

横向:http://cl.ly/image/360E1u1s0R1H

【问题讨论】:

  • 注意:我也尝试将底部空间设置为 Superview >= 81 无济于事

标签: ios ipad interface-builder xcode5 autolayout


【解决方案1】:

不要设置标签的高度(通过设置它的顶部底部),不要设置它的高度。标签的高度会随着宽度的变化而自动增加或减少,以完全适合其内容。

编辑:糟糕,没有仔细阅读问题;我们不能删除底部约束,因为它需要帮助设置超级视图(滚动视图的内容视图)的大小。在这种情况下,解决方案是提示标签为其内容假定正确的高度,方法是设置其self.preferredMaxLayoutWidth 以匹配其宽度。这是我书中的代码,显示了一个以这种方式自动调整自身的 UILabel 子类:

-(void)layoutSubviews {
    [super layoutSubviews];
    self.preferredMaxLayoutWidth = self.bounds.size.width;
}

【讨论】:

  • 如果我将底部空间移除到超级视图,它不再强制滚动视图的内容视图展开并基本上被剪裁
  • 在布局期间,设置标签的preferredMaxLayoutWidth 以匹配其宽度。这将强制标签采用正确的高度。
  • 我在阅读此答案后得出了该解决方案:stackoverflow.com/a/19194592/535632
  • 代码见我的书(本节末尾:apeth.com/iOSBook/ch23.html#_uilabel)。感谢您的勾选;我不应该得到它,因为我没有足够仔细地阅读你的问题。我将编辑以改进我的答案。
  • 是的,我在上面的答案编辑中复制了该代码。很高兴你解决了这个问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多