【问题标题】:UILabel text layout when wrapping is "wrong" in iOS 7换行时的UILabel文本布局在iOS 7中是“错误的”
【发布时间】:2013-10-02 20:25:00
【问题描述】:

下面的屏幕截图是在 iOS 7 中。label1(黄色,顶部)是在其框架左上角下方的文本原点绘制的,并在底部被剪裁。在 iOS 5/6 中,文本原点位于标签框的左上角。 label2label3 按预期渲染和布局。

这是生成此视图的代码:

- (void)loadView
{
    UIView *view = [[UIView alloc] initWithFrame:UIScreen.mainScreen.applicationFrame];
    view.backgroundColor = UIColor.blueColor;
    self.view = view;

    UILabel *label1 = [UILabel new];
    label1.backgroundColor = UIColor.yellowColor;
    label1.font = [UIFont systemFontOfSize:16.0f];
    label1.numberOfLines = 0;
    label1.lineBreakMode = NSLineBreakByWordWrapping;
    label1.frame = CGRectMake(50, 100, 200, 18);
    label1.text = @"This text is too long to fit on one line.";
    [self.view addSubview:label1];

    UILabel *label2 = [UILabel new];
    label2.backgroundColor = UIColor.greenColor;
    label2.font = [UIFont systemFontOfSize:16.0f];
    label2.numberOfLines = 0;
    label2.lineBreakMode = NSLineBreakByWordWrapping;
    label2.frame = CGRectMake(50, 150, 200, 36);
    label2.text = @"This text is too long to fit on one line.";
    [self.view addSubview:label2];

    UILabel *label3 = [UILabel new];
    label3.backgroundColor = UIColor.orangeColor;
    label3.font = [UIFont systemFontOfSize:16.0f];
    label3.numberOfLines = 0;
    label3.lineBreakMode = NSLineBreakByWordWrapping;
    label3.frame = CGRectMake(50, 200, 200, 18);
    label3.text = @"This text is short.";
    [self.view addSubview:label3];
}

问题:为什么这在 iOS 7 中有所不同,我需要更改哪些标签属性才能使 label1 中的文本按预期从其框架的左上角开始呈现。

【问题讨论】:

    标签: uilabel ios7


    【解决方案1】:

    我想通了。我不会删除我的问题,而是在这里回答,这样如果其他人遇到这个问题,他们知道该怎么做。

    标签帧被硬编码为特定大小。在label1 的情况下,高度是18。这个界限不够高,不能用系统字体在16 点处渲染一行文本。 iOS 5/6 显然顶部对齐文本矩形,而在 iOS 7 中这会导致不可预知的行为。此修复是为了确保标签边界足够高以显示至少一行文本。

    问题中的示例代码是为了重现此问题。我的实际应用程序代码根据所需的行数计算标签高度,其中各种其他视图位于标签周围,因此框架在运行时动态更改。我通过确保最小标签高度可以适合单行文本来解决我的应用程序中的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 2013-09-05
      • 2012-08-16
      • 2015-05-30
      相关资源
      最近更新 更多