如何根据目标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
中的文本大小。替换您的UITextView
的WIDHT_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 在 viewWillAppear 中调用时返回错误值... 我在 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】:UITextView
是 UIScrollView
与 UILabel
是子视图。
UIScrollView
已经估计高度并在内容中显示文本输入。
所以我们只需将ContentSize.Height
设置为就可以了。
如果ContentInset == UIEdgeInset (a,b,c,d)
,则必须添加UIEdgeInset
的维度
查看更多:how to estimate height of UITextView
【讨论】:
以上是关于如何根据目标c中的内容设置UITextView的高度的主要内容,如果未能解决你的问题,请参考以下文章
我将如何(以编程方式)将 UITextView 的高度设置为其在 Swift 中的内容大小?