4

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

在此处输入图像描述

这是生成此视图的代码:

- (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按预期从其框架的左上角开始呈现文本。

4

1 回答 1

8

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

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

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

于 2013-10-02T20:47:46.837 回答