如何根据目标c中的内容设置UITextView的高度

Posted

技术标签:

【中文标题】如何根据目标c中的内容设置UITextView的高度【英文标题】:How to set height of UITextView according to its content in objective c 【发布时间】:2011-11-16 02:49:37 【问题描述】:

我有一个UITextView,想根据内容的变化设置它的高度。

如何获取内容的高度。

请指导我。

提前致谢。

【问题讨论】:

你有什么样的内容? 我有英语和日语两种语言的字符串 【参考方案1】:

如果你想为某些文本计算UITextView 的高度,那么你可以使用这样的方法:

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

fontWithName 中定义您在UITextView 中使用的字体,在size 参数中-UITextView 中的文本大小。替换您的UITextViewWIDHT_OF_VIEW width 宽度。

textViewSize.height 将包含高度,UITextField 无需滚动即可显示文本

【讨论】:

好吧,我照着做吧 为什么这么复杂?它有效,但这似乎是一个如此复杂的解决方案,我几乎无法相信没有更简单的解决方案......但是即使搜索了几个小时我也没有找到它......在我知道的所有其他平台(Java,NET, html) 这要容易得多... @jbandi 我不同意这个解决方案很复杂。但是如果您需要知道一行的大小,那么您可以使用[text sizeWithFont:font] 方法。还有什么比这更简单的? @Nekto 好吧,这个问题的驱动目标是获得一个“自动增长的文本框”。使用此解决方案,您首先必须获取 UITextView 的宽度(为此,您通常必须找出设备的方向)。然后您必须计算 UITextView 内容的高度(为此您必须向 UITextView 询问当前字体等详细信息)。然后你必须将计算出的高度传播回 UITextView,自动布局并不那么容易......这对我来说太复杂了,并且破坏了所有类型的封装......但我是一个头脑简单的人:-) @Nekto 顺便说一句:我很高兴你发布了这个解决方案,我投了赞成票。它帮助我解决了我的问题。但我觉得应该有ios平台提供的更简单的解决方案来实现“自动增长的文本框”。【参考方案2】: -(void)viewDidAppear:(BOOL)动画 [超级 viewDidAppear:动画]; CGRect 框架 = _textView.frame; frame.size.height = _textView.contentSize.height; _textView.frame = 框架;

【讨论】:

这在 viewWillAppear 中似乎不起作用。它在放入 viewDidAppear 时有效,但随后会导致“视觉闪烁”,这意味着调整大小在屏幕上可见。 _textView.contentSize.height 在 vi​​ewWillAppear 中调用时返回错误值... 我在 viewDidLoad 中使用它但不起作用...您的评论证明非常有帮助。它在 viewDidAppear 中有效。【参考方案3】:

您可以使用UIStringDrawing类别中的方法计算文本的大小:

CGSize textSize = [textView.text sizeWithFont:font 
                                 forWidth:textWidth 
                                 lineBreakMode: UILineBreakModeWordWrap];

【讨论】:

【参考方案4】:
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];

【讨论】:

【参考方案5】:

UITextViewUIScrollViewUILabel 是子视图。 UIScrollView 已经估计高度并在内容中显示文本输入。

所以我们只需将ContentSize.Height 设置为就可以了。

如果ContentInset == UIEdgeInset (a,b,c,d),则必须添加UIEdgeInset的维度

查看更多:how to estimate height of UITextView

【讨论】:

以上是关于如何根据目标c中的内容设置UITextView的高度的主要内容,如果未能解决你的问题,请参考以下文章

如何让 UITextView 根据内容动态调整自身大小

如何根据内容调整 UITextView 的大小,宽度固定

如何根据内容调整 UITextView 的大小?

我将如何(以编程方式)将 UITextView 的高度设置为其在 Swift 中的内容大小?

禁用 UITextView 的放大镜但启用目标 c 中的链接和电话号码检测

根据 Content 设置 UITextView 和 UITableViewCell 的大小