我希望精确地扩展UILabel
。我有一个文本字段,我插入文本。点击完成后,文本字段会移动并设置标签的文本。我希望在文本大于屏幕宽度时插入多行,并截断标签框以使文本适合。
这是我的代码
if(isCaption){
//Begin Edit Text
_textlabel.hidden = NO;
_textlabel.text = currentText;
_textFieldOutlet.hidden = YES;
[_textFieldOutlet setTextAlignment:NSTextAlignmentLeft];
[_textlabel setTextAlignment:NSTextAlignmentLeft];
[self.screenShotView bringSubviewToFront:_textlabel];
_textlabel.frame = CGRectMake(10,
_textlabel.frame.origin.y,
[currentText sizeWithAttributes:@{NSFontAttributeName:[_textlabel font]}].width,
[currentText sizeWithAttributes:@{NSFontAttributeName:[_textlabel font]}].height);
isEditing = YES;
isCaption = NO;
}
问题是结果是一个庞大的文本行,我希望它在多行上传播。如何实现这一目标?如何分隔给定宽度的线?
答案 0 :(得分:2)
如果你想要多行,你不应该用sizeWithAttributes来计算你的宽度:。您应该修复标签的宽度,然后使用boundingRectWithSize:方法计算高度。
您可以按如下方式创建辅助方法:
- (CGSize)suggestedSizeWithFont:(UIFont *)font size:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode forString:(NSString *)text {
NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
paragraphStyle.lineBreakMode = lineBreakMode;
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: font, NSParagraphStyleAttributeName: paragraphStyle}];
CGRect bounds = [attributedString boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin context:nil];
return bounds.size;
}
或者您可以创建一个类别并删除那个额外的文本参数。
然后您可以按照以下方式为标签的文本调用方法:
CGSize requiredSize = [self suggestedSizeWithFont:_textLabel.font size:CGSizeMake(self.view.frame.size.width, CGFLOAT_MAX) lineBreakMode:_textLabel.lineBreakMode forString:_textLabel.text];
_textLabel.frame = CGRectMake(0, _textlabel.frame.origin.y, requiredSize.width, requiredSize.height);
您可以将宽度设置为您希望标签适合的宽度。相应地计算高度。但请记住将numberOfLines设置为0.
答案 1 :(得分:0)
尝试插入以下代码行:
_textLabel.numberOfLines = 0;