【问题标题】:UILabel sizeToFit method not working properlyUILabel sizeToFit 方法无法正常工作
【发布时间】:2013-12-01 07:22:10
【问题描述】:

我试图在一行中的 UILabel 中显示一大段文本。 UILabel 是 UIScrollView 的子视图,因此我可以滚动查看整个 UILabel。

我的问题是 sizeToFit 方法仅部分有效。

textLabel.attributedText = attributedString;
textLabel.numberOfLines = 1;
[textLabel sizeToFit];
textScrollView.contentSize = CGSizeMake(textLabel.frame.size.width, textLabel.frame.size.height);

UIScrollView 内容大小变得足够大,可以显示整个 UILable,但是对于这样的一行:

所以我会尝试每隔一段时间在这里分享一些。”

UILabel 显示:

所以我会尝试分享一些...

我做错了什么?

【问题讨论】:

  • UILabel 的“Lines”属性是否为 0 ?
  • 否 - "textLabel.numberOfLines = 1;"
  • 试着把它设为 0.......
  • 将其更改为 0 - 现在它在多行中显示文本
  • 你的自动布局被检查了吗?

标签: ios objective-c uiscrollview uilabel sizetofit


【解决方案1】:

由于您已将 Label 限制为仅显示一行 Text 并截断其余部分,因此它的行为相同

textLabel.attributedText = attributedString;
textLabel.numberOfLines = 0;
[textLabel sizeToFit];
textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textScrollView.contentSize = CGSizeMake(textLabel.frame.size.width, textLabel.frame.size.height);

希望对你有帮助

【讨论】:

  • 现在它不显示“...”但它不显示整个文本。并且 UISCrollView 不再滚动...
【解决方案2】:

试试

textLabel.adjustsFontSizeToFitWidth  = YES;
textLabel.minimumFontScale      =  0.5;  

【讨论】:

    【解决方案3】:

    结果证明代码没问题 - 但是选中了使用自动布局。 取消选中它 - 一切都很好......

    【讨论】:

      【解决方案4】:

      如果您想在启用自动布局的情况下实现这一点,这很简单。只需确保添加numberOfLines

      textLabel.adjustsFontSizeToFitWidth = YES;
      textLabel.numberOfLines = 0;
      

      【讨论】:

      • 对我来说,诀窍是确保标签的位置被固定 - 然后尺寸也会按预期自行调整。小心adjustsFontSizeToFitWidth - 如果文本不适合,它只会减小字体大小,这可能根本不是你想要的。
      【解决方案5】:

      令人惊讶的是,如果您没有对标签的宽度进行限制,这将起作用:

      [textLabel.superview layoutSubviews];
      

      我通过反复试验了解到这一点。

      【讨论】:

      • 我注意到这也很有效,但我想知道留下含糊不清的视图是否是一种好习惯
      • @vikzilla 这可能是故意的。当约束不明确时,某种默认行为就会出现,在这种情况下,标签会自动调整大小以适应。不过,您仍然可以通过设置最大和最小限制来利用此行为。
      【解决方案6】:

      sizeToFit 无法正常工作的最常见原因是UILabel 没有任何自动布局约束,例如,如果您隐含地依赖相对于左上角保持固定的视图位置。正如 Maxthon Chan 的回答所建议的那样,添加任何约束(前导、顶部、centerY 等)都可以修复它,大概是因为它会导致 layoutSubviews 在某个时候被调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-13
        • 2019-06-02
        • 2021-12-29
        • 2014-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多