【问题标题】:Getting wrong CGRect for boundingRectWithSize:options:attributes:context:为 boundingRectWithSize:options:attributes:context 获取错误的 CGRect:
【发布时间】:2014-08-28 05:09:19
【问题描述】:

我在 UITableViewCell 中有一个 UILabel。 UILabel 的高度取决于使用自动布局约束的 UITableViewCell 的高度。 UILabel 的宽度是176.0 并且是固定的。

我在 UILabel 中使用 boundingRectWithSize:options:attributes:context: 来确定 UITableViewCell 的高度。

这里是显示界面生成器中的 UILabel 配置的屏幕截图

这是获取 UILabel 文本的 boundingRect 的代码。

        NSString *text = @"Extra long goods charge";
        CGSize maxSize = CGSizeMake(176.0f, MAXFLOAT);
        CGRect rect = [text boundingRectWithSize:maxSize
                                         options:NSStringDrawingUsesLineFragmentOrigin
                                      attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16.0]}
                                         context:nil];

返回的大小为152.132813, 18.1796875,但此矩形不够大,无法包含Extra long goods charge 文本。事实上,即使是176, 18 大小的矩形也不能包含此文本。

我的猜测是我在使用boundingRectWithSize

【问题讨论】:

    标签: ios objective-c ios7 nsstring


    【解决方案1】:

    尝试改变。换行符作为“字符换行”并添加约束作为标签高度。 查看带大小的边界矩形是否返回正确的值。

    如果没有,则删除所有约束并检查标签高度并根据所有标签高度(从boundingrectwithSize返回的值)计算行高应该是多少,并调整heightForRowAtIndexPath委托中的单元格高度UITableView 的方法。这可能是您的文本未显示的另一个原因,尽管标签的高度显示了预期的内容。

    尝试一次。

    [编辑]

    我没有正确地知道你得到了你应该得到的适当高度,这就是为什么它弄乱了文本的显示。 如果是这样的话,你可以试试这个方法。

    NSString *message =@"Your text here!";
    CGSize expectedLabelSize = [message sizeWithFont:[UIFont systemFontOfSize:16.0f] constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByCharWrapping];
    

    虽然如果是这种情况,那么上面的方法在 iOS 7 中已被弃用,但它工作得差不多了。

    【讨论】:

    • 1.更改界面生成器中的任何内容将如何影响 boundingRectWithSize 返回的大小: 2. 问题是 boundingrectwithSize 返回的大小太小。我尝试在界面生成器中将此尺寸用作 UILabel 的框架尺寸,但我无法放入文本中。
    • “不能包含文本”,如“...”中的 - 不完整的文本?
    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    相关资源
    最近更新 更多