是否有相当于NSString的sizeWithFont:
方法,可用于计算给定宽度的UITectView中文本的高度? NSString中的所有方法只能在我能说的单行上运行。
答案 0 :(得分:33)
从这些NSString方法的Apple's reference开始,您可以使用-sizeWithFont:constrainedToSize:
或-sizeWithFont:constrainedToSize:lineBreakMode:
来计算“多行文本的度量标准”。
CGSize size = [theString sizeWithFont:font
constrainedToSize:CGSizeMake(width, 100000)];
return size.height;
答案 1 :(得分:4)
对于UITextView
,您所要做的只是在视图上调用-sizeToFit
,它会自动调整其高度,直到它适合所有可用文本。您需要做的就是设置文本视图的宽度,设置文本,然后调用-sizeToFit
。文本视图将调整其高度,使其足以适合所有文本。
<强>更新强>
显然文本视图仅在高度过高时缩小,但如果没有足够的高度显示所有文本,则文本视图不会增长。此外,在您致电-sizeToFit
后,文字视图的y
坐标将重置为0.0f
。所以这就是你做的:
CGFloat textViewWidth = 300.0f;
CGFloat textViewPadding = 10.0f;
UITextView * textView = [[[UITextView alloc] init] autorelease];
textView.text = ...; // Really long string
textView.frame = CGRectMake(0.0f, 0.0f, textViewWidth, CGFLOAT_MAX);
[textView sizeToFit]; // Shrinks the height to fit all the text
textView.frame = CGRectMake(textViewPadding, textViewPadding,
textViewWidth, textView.frame.size.height);
[self.view addSubview:textView];
首先,您只需设置框架,就可以设置所需的宽度。您使用CGFLOAT_MAX
来表示无限高度。接下来,调用-sizeToFit
会缩小高度,直到它适合所有文本。但是,它还会重置y
坐标,因此我们继续设置框架以配置x
和y
坐标 - 在此示例中,10.0f
用于x
{1}}和y
- ,保留宽度,并将高度设置为-sizeToFit
计算的任何值。
答案 2 :(得分:1)
实际上,您可以使用属性contentSize。