NSString wordwrapping像UILabel NSLineBreakByWordWrapping

时间:2015-04-25 18:57:54

标签: ios objective-c

我希望为动态高度计算目的而对字符串进行单词包装,因为在UILabel NSLineBreakByWordWrapping中,为了动态目的计算字符串高度很容易调整UILabel高度请任何伙伴让我知道字符串中的文字包装吗?

CGSize size = CGSizeZero;
NSString *carNameString = cars.name;
carNameString = [carNameString stringByReplacingOccurrencesOfString:@"\n" withString:@"\n\n"];

CGRect f1 = [carNameString boundingRectWithSize:CGSizeMake([[UIScreen mainScreen]bounds].size.width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:[UIFont fontWithName:@"Copperplate" size:20] } context:nil];
size = CGSizeMake(f1.size.width, f1.size.height + 1);

注意:我使用的是iOS版本6.3

编辑: 这是UILabel代码:

    [carLabel setBackgroundColor:[UIColor clearColor]];
    [carLabel setText:carNameString];
    [carLabel setAdjustsFontSizeToFitWidth:YES];
    [carLabel setLineBreakMode:NSLineBreakByWordWrapping];
    [carLabel setNumberOfLines:0];
    [carLabel setTextColor:[UIColor whiteColor]];

1 个答案:

答案 0 :(得分:2)

您似乎没有使用从边界矩形计算出的尺寸 此外,我建议您使用与标签相同的字体,而不是用于计算边界矩形而不是:

[label setAdjustsFontSizeToFitWidth:YES];


这段代码应该有效:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)];
label.numberOfLines = 0;
label.font = [UIFont fontWithName:@"Copperplate" size:20];
label.text = carNameString;

但是,您的代码并未提供UILabel的初始化,您也不会告诉我们如何设置标签的框架。

如果您希望将其与自动布局一起使用,则必须将translatesAutoresizingMaskIntoConstraints设置为NO并使用从边界矩形计算的大小来设置容器视图的大小。
<登记/> 以下是基于您的代码描述它的示例:

UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)];
[self.view addSubview:containerView];

UILabel *label = [UILabel new];
label.translatesAutoresizingMaskIntoConstraints = NO;

[containerView addSubview:label];

[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[label]|"
                                                                      options:0
                                                                      metrics:nil
                                                                        views:NSDictionaryOfVariableBindings(label)]];
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[label]|"
                                                                      options:0
                                                                      metrics:nil
                                                                        views:NSDictionaryOfVariableBindings(label)]];
label.numberOfLines = 0;
label.font = [UIFont fontWithName:@"Copperplate" size:20];
label.text = carNameString;