我希望为动态高度计算目的而对字符串进行单词包装,因为在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]];
答案 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;