【问题标题】:UILabel doesn't fully resize using Auto Layout (almost does - one line short)UILabel 没有使用自动布局完全调整大小(几乎可以 - 短一行)
【发布时间】:2014-10-22 20:38:34
【问题描述】:

使用带有 UILabel 的 Auto Layout 时遇到一个奇怪的问题,它的大小几乎调整到其内容大小减去一行(让我抓狂)。所以基本上,当缩小到 iPhone 5 或 6 时,它似乎到达了应该减去几个像素的位置,从而导致最后出现椭圆。它在 6+ 上运行良好,这就是 XIB 的大小。

这是 XIB 的外观以及我设置的约束条件。标签是“这里的大长标签是事件描述”。

基于这个stack post,我想我会弄明白的。我尝试了帖子中提到的两种方法。屏幕截图中的所有四个约束都设置为 1,000。如果我按照帖子所说的那样添加优先级为 500 的高度约束,低于垂直拥抱和垂直抗压优先级,它仍然不起作用。我也只是没有设置高度约束,保留了首选宽度设置,并设置了前导和尾随空间约束,这在 cmets 中提到。行数设置为0。

为了提供更多详细信息,UILabel 位于UIView 中,设置为contentView。然后我将contentView 添加到UIScrollViewUIScrollView 通过将contentView 固定在 0 到所有四个边来自动调整大小。 contentContainer 也受限于屏幕宽度(不理想,但只有这样我才能让它工作 - 不确定它是否与这个问题有关)。我在控制台中没有遇到任何约束问题。对于contentViewtranslatesAutoresizingMaskIntoContraints 设置为 NO。这是UILabel 运行时的样子:

底部应该长一行以适应。有人请帮助我!

【问题讨论】:

    标签: ios objective-c iphone autolayout constraints


    【解决方案1】:

    我想我可能已经解决了这个问题,但这个解决方案似乎很老套。这似乎是设置preferredMaxLayoutWidth 的问题。它适用于我为 iPhone 6+ 设置的内容,但由于某种原因,在 iPhone 5/6 上几乎以明显更小的宽度到达那里。刚刚添加了这个:

    self.eventDescriptionLabel.preferredMaxLayoutWidth = self.eventDescriptionLabel.frame.size.width;
    

    现在它可以正常工作了。

    【讨论】:

    • 是的,这是解决问题的正确方法,是的,它很hacky。苹果真的应该对那个恕我直言做点什么,因为它让很多人望而却步。如果你继承 UILabel,把这段代码放在那里,然后直接使用你的子类而不是 UILabel,那么你会省去很多麻烦。
    猜你喜欢
    • 1970-01-01
    • 2014-08-19
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多