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

Posted

技术标签:

【中文标题】如何让 UITextView 根据内容动态调整自身大小【英文标题】:How to get a UITextView to dynamically size it's self to it's content 【发布时间】:2013-02-19 11:16:32 【问题描述】:

我正在尝试让 UITextView 根据其内容动态调整自身大小。有时文本视图的高度为 100 有时为 700。

到目前为止,我尝试过的所有方法都没有奏效。

我在viewDidLoadviewDidLayoutSubviews 中尝试了以下方法。 这是代码:

CGRect frameDesc = self.descriptionDeal.frame;
frameDesc.size.height = self.descriptionDeal.contentSize.height;
self.descriptionDeal.frame = frameDesc;

self.descriptionDeal.backgroundColor = [UIColor redColor];

我添加了背景颜色,这样我就可以看到视图的大小,并且它没有根据内容调整大小。

我也试过了:

    [self.descriptionDeal sizeToFit];

另外,不确定它是否会影响任何东西,但在 UITextView 布局的故事中,大小是在那里设置的。我以为上面的代码会覆盖它,但有些东西不能正常工作。

感谢您的帮助

【问题讨论】:

***.com/a/7501164/454165 【参考方案1】:

你应该在你的文本视图的代理的textViewDidChange:method中改变大小

使用https://***.com/a/14956351/1311910 获得合适的高度。

【讨论】:

您提供的第二个链接是此页面的链接,仅供参考。【参考方案2】:

尝试以下字符串方法,这些方法可用于获取将字符串显示到视图所需的尺寸。您可以根据从这些方法之一获得的 CGSize 更改 textview 的框架。如果您不打算在项目中使用自动布局来支持早期版本的 ios,请使用此选项。

- (CGSize)sizeWithFont:(UIFont *)font; // Uses NSLineBreakByWordWrapping
- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(NSLineBreakMode)lineBreakMode;
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size; // Uses NSLineBreakModeWordWrap
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode; // NSTextAlignment is not needed to determine size

【讨论】:

以上是关于如何让 UITextView 根据内容动态调整自身大小的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局的 UITableView 中的动态 UITextView 高度?

如何根据 UITextView 动态调整 xib 的大小

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

根据内容字体大小动态调整 UIWebView 的大小

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

如何动态调整 UITextView 的高度