NSString sizeWithFont:多行?

时间:2011-02-05 19:29:33

标签: iphone objective-c text height

是否有相当于NSString的sizeWithFont:方法,可用于计算给定宽度的UITectView中文本的高度? NSString中的所有方法只能在我能说的单行上运行。

3 个答案:

答案 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坐标,因此我们继续设置框架以配置xy坐标 - 在此示例中,10.0f用于x {1}}和y - ,保留宽度,并将高度设置为-sizeToFit计算的任何值。

答案 2 :(得分:1)

实际上,您可以使用属性contentSize。