【发布时间】:2011-06-22 00:03:37
【问题描述】:
是否有等效于 NSString 的 sizeWithFont: 方法,可用于计算给定宽度的 UITectView 中文本的高度?据我所知,NSString 中的所有方法都只在一行上运行。
【问题讨论】:
标签: iphone objective-c text height
是否有等效于 NSString 的 sizeWithFont: 方法,可用于计算给定宽度的 UITectView 中文本的高度?据我所知,NSString 中的所有方法都只在一行上运行。
【问题讨论】:
标签: iphone objective-c text height
对于这些 NSString 方法,从 Apple's reference 开始,您可以将 -sizeWithFont:constrainedToSize: 或 -sizeWithFont:constrainedToSize:lineBreakMode: 用于“计算多行文本的指标”。
CGSize size = [theString sizeWithFont:font
constrainedToSize:CGSizeMake(width, 100000)];
return size.height;
【讨论】:
-drawInRect: 方法将字符串拉出以检查它是否在正确的位置回绕。
-drawInRect:绘制的文本与sizeWithFont: 的结果不匹配。
对于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 和y——,不考虑宽度并将高度设置为 -sizeToFit 计算的任何值。
【讨论】:
UITextView 是如何真正起作用的。执行类似于我添加的示例代码的操作应该会产生一个足够高以容纳所有文本的文本视图。
实际上,您可以使用属性 contentSize。
【讨论】: