【问题标题】:UILabel render text incorrectly in IOS7UILabel 在 IOS7 中错误地渲染文本
【发布时间】:2013-09-25 05:16:48
【问题描述】:

我使用以下代码计算UILabel的界限

CGRect bound = [lblName.text boundingRectWithSize:(CGSize){206, 99999}
                                    options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                                 attributes:stringAttributes
                                          context:nil];

UILabel 是嵌入在UIScrollView 中的,它是UITableViewCell 的子视图。

我得到了什么

我做了一个测试,在表格单元格中使用UILabel,在UIScrollView 中分别使用UILabel,结果符合我的预期

请注意,UILabel 的所有设置(字体、换行模式等)在所有这些情况下都是相同的。 boundingRectWithSize 在所有这些情况下都返回相同的结果,唯一的区别是 UILabel 呈现文本的方式。

这里有什么问题?我错过了什么吗?

更新:仅当我从 nib 加载 UILabel 时才会发生这种情况,如果它是通过编程方式创建的,则没有问题。 (我的项目是从 xcode 4 迁移到 xcode 5)

【问题讨论】:

    标签: uilabel ios7


    【解决方案1】:

    试试这个:

    bound.size.height += 1;
    

    更新:

    根据苹果的文档

    - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context
    

    此方法返回小数大小(在返回的 CGRect 的大小分量中);要使用返回的大小来调整视图大小,您必须使用 ceil 函数将其值提高到最接近的较高整数。

    所以你可能想使用这种方法:

    bound.size.height = ceil(bound.size.height);
    

    【讨论】:

    • 你拯救了我的一天。谢谢。
    • 我相信这句话适用于所有 boundingRectWithSize 方法(在我的例子中是 NSAttributedString)。
    【解决方案2】:

    我在一些标签上看到了相同的行为,在 iOS 6 中看起来不错,但在 iOS 7 中,它们在顶部和底部有额外的填充,就像在你的图片中一样。

    这是我最终在viewDidLoad 中正确布局所需要做的事情 - 适用于 iOS 6 和 7。

    self.someLabel.autoresizingMask = UIViewAutoresizingNone;
    self.someLabel.frame = CGRectMake(
        self.someLabel.frame.origin.x,
        self.someLabel.frame.origin.y,
        labelWidth, // define elsewhere if you're targeting different screen widths
        self.someLabel.bounds.size.height);
    [self.someLabel sizeToFit];
    

    【讨论】:

    • 您好,我正在尝试根据您的解释手动设置标签位置以适应 iPhone 4 和 5 设计。我正在使用self.myLabel.autoresizingMask = UIViewAutoresizingNone;self.myLabel.frame = CGRectMake(10, 10, 280, 21);,但该位置仅显示情节提要中的那个,而不是我在CGRectMake 中选择的数字。如果我更改标签中的文本,它会更改它,但新位置没有。我在 viewDidLoad 做这个,我在 Xcode 5 上。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多