boundingRectWithSize在希伯来语中是错误的

时间:2015-07-07 11:55:24

标签: ios nsstring hebrew

我建造的这种方法完美地用英语表达。 现在我也试图支持希伯来语,boundingRectWithSize错过了高度(给了我太短的东西)

无法弄清楚原因......

+ (void) setTextAndFitLabel:(UILabel *)label text:(NSString *)text
{
    [label setNumberOfLines:0];
    text = [text stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];
    [label setText:text];
    NSDictionary *attributes = @{NSFontAttributeName: label.font};
    CGRect rect = [label.text boundingRectWithSize:CGSizeMake(label.frame.size.width, CGFLOAT_MAX )
                                           options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                                        attributes:attributes
                                           context:nil];
    if ([text isEqualToString:@""])
    {
        rect = CGRectMake(0,0,0,0);
    }
    CGRect labelFrame = label.frame;
    labelFrame.size.height = ceil(rect.size.height);

    NSArray *constraints = [label constraints];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstAttribute = %d", NSLayoutAttributeHeight];
    NSArray *filteredArray = [constraints filteredArrayUsingPredicate:predicate];
    if(filteredArray.count == 0){
        label.frame = labelFrame;
    }
    else
    {
        NSLayoutConstraint *heightConstraint =  [filteredArray objectAtIndex:0];
        heightConstraint.constant = ceil(rect.size.height);
    }
}

1 个答案:

答案 0 :(得分:0)

-boundingRectWithSize只计算打印文本所需的空间量 当您询问UI/Label/TextView/Textfield的大小时,您应该考虑它们是具有特定属性的视图,例如UITexView在打印文本之前包含一些插入。
在之后分配文本调用-sizeToFit-sizeThatFits:之后,请求其框架 我不知道你为什么需要这个,但值得一提的是,UILabel内在内容大小是在完全显示的指定文本上计算的。