如何在Objective C中根据UITextView的内容设置其高度

6

我有一个UITextView,希望根据其内容变化设置其高度。

如何获取内容的高度。

请指导我。

提前感谢。


你有什么样的内容? - Davyd Geyl
我有一个字符串,包含两种语言,英语和日语。 - Shivomkara Chaturvedi
5个回答

17

如果您想为某些文本计算您的UITextView的高度,则可以使用以下方法:

CGSize textViewSize = [text sizeWithFont:[UIFont fontWithName:@"Marker Felt" size:20] 
                       constrainedToSize:CGSizeMake(WIDHT_OF_VIEW, FLT_MAX) 
                       lineBreakMode:UILineBreakModeTailTruncation];

fontName中定义您在UITextView中使用的字体,在大小参数中定义文本的大小。用UITextView的宽度替换WIDHT_OF_VIEW

textViewSize.height将包含UITextField显示文本而不滚动所需的高度。


为什么这个如此复杂?虽然它能工作,但这似乎是一个非常复杂的解决方案,我几乎无法相信没有更简单的解决方案...然而,即使我搜索了数小时,也没有找到其他任何我知道的平台(Java、.NET、HTML)中那么容易的解决方案... - jbandi
@jbandi,我不认为这个解决方案很复杂。但是,如果您需要知道一行的大小,则可以使用[text sizeWithFont:font]方法。还有什么比这更简单的呢? - Nekto
@jbandi 我明白了。可能吧。但如果一切都很简单,那我怎么赚钱呢?=) - Nekto
示例中使用的函数在iOS 6中已被弃用。 - Zorayr
@Zorayr 在 iOS7 中,我想。 - Nekto
显示剩余5条评论

10
-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    CGRect frame = _textView.frame;
    frame.size.height = _textView.contentSize.height;
    _textView.frame = frame;
}
这段代码是一个iOS开发中的方法,用于在视图出现后调整文本框的大小以适应其内容。具体来说,它通过获取文本框的内容大小来设置文本框的高度。

2
当放置在viewWillAppear中时,这似乎无法正常工作。当放置在viewDidAppear中时它可以工作,但是会导致“视觉闪烁”,也就是说调整大小在屏幕上可见。当在viewWillAppear中调用时,_textView.contentSize.height返回错误的值... - jbandi
我在viewDidLoad中使用它,但不起作用...你的评论非常有帮助。它在viewDidAppear中起作用。 - gagan sharma

1
您可以使用UIStringDrawing类别中的方法计算文本的大小:
CGSize textSize = [textView.text sizeWithFont:font 
                                 forWidth:textWidth 
                                 lineBreakMode: UILineBreakModeWordWrap];

0

sizeWithFont已经被弃用。

CGRect rect = [textView.text boundingRectWithSize:CGSizeMake(textView.frame.size.width, CGFLOAT_MAX)
                                                                    options:NSStringDrawingUsesLineFragmentOrigin
                                                                    attributes:@{NSFontAttributeName: textView.font}
                                                                    context:nil];
        rect.size.width = ceil(rect.size.width);
        rect.size.height = ceil(rect.size.height);

希望能对某人有所帮助。愉快编程。


0
CGSize countentSize = textView.contentSize;
int numberOfLinesNeeded = countentSize.height / textView.font.lineHeight;
int numberOfLinesInTextView = textView.frame.size.height / textView.font.lineHeight;
CGRect textViewFrame= textView.frame;
textViewFrame.size.height = numberOfLinesNeeded * textView.font.lineHeight;
[textView setFrame:textViewFrame];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接