如何根据内容调整 UITextView 的大小?
Posted
技术标签:
【中文标题】如何根据内容调整 UITextView 的大小?【英文标题】:How do I size a UITextView to its content? 【发布时间】:2008-09-08 19:21:19 【问题描述】:有没有调整UITextView
的大小以符合其内容的好方法?比如说我有一个包含一行文本的UITextView
:
"Hello world"
然后我添加另一行文本:
"Goodbye world"
在 Cocoa Touch 中是否有一个很好的方法来获取 rect
,它将保存文本视图中的所有行,以便我可以相应地调整父视图?
作为另一个示例,查看日历应用程序中事件的注释字段 - 请注意单元格(以及它包含的 UITextView
)如何扩展以容纳注释字符串中的所有文本行。
【问题讨论】:
请考虑更新正确答案,因为接受的答案会导致不必要的计算,现在有一个 contentSize 属性来解决这个问题。 为什么没有关于如何以非动态方式执行此操作的问题?我什至不知道如何静态地做到这一点。并且提供的解决方案似乎没有覆盖情节提要中的“约束”。 【参考方案1】:这适用于 ios 6.1 和 iOS 7:
- (void)textViewDidChange:(UITextView *)textView
CGFloat fixedWidth = textView.frame.size.width;
CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
CGRect newFrame = textView.frame;
newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
textView.frame = newFrame;
或在 Swift 中(适用于 iOS 11 中的 Swift 4.1)
let fixedWidth = textView.frame.size.width
let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
textView.frame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
如果您想要支持 iOS 6.1,那么您还应该:
textview.scrollEnabled = NO;
【讨论】:
在 iOS 7 上测试,将 UITextView 调整为 UITableViewCell。工作真的很棒。这是最终对我有用的唯一答案。谢谢! 我需要textview.scrollEnabled = NO;
来防止文本被截断,即使在 iOS 7 中也是如此。
我建议使用CGFLOAT_MAX
宏而不是MAXFLOAT
。适用于 32/64 位平台。
在下一行输入前波动不大的加这个` NSRange bottom = NSMakeRange(textView.text.length -1, 1); [textView scrollRangeToVisible:bottom];`
为什么在 Swift 版本中有两个单独的 sizeThatFits(...) 调用?第一行是干什么用的?【参考方案2】:
这不再适用于 iOS 7 或更高版本
实际上有一种非常简单的方法可以将UITextView
调整为正确的内容高度。可以使用UITextView
contentSize
来完成。
CGRect frame = _textView.frame;
frame.size.height = _textView.contentSize.height;
_textView.frame = frame;
需要注意的是,正确的contentSize
仅在UITextView
使用addSubview
添加到视图之后 可用。在此之前它等于frame.size
如果启用自动布局,这将不起作用。对于自动布局,一般的做法是使用sizeThatFits
方法并在高度约束上更新constant
值。
CGSize sizeThatShouldFitTheContent = [_textView sizeThatFits:_textView.frame.size];
heightConstraint.constant = sizeThatShouldFitTheContent.height;
heightConstraint
是一个布局约束,您通常通过 IBOutlet 将属性链接到情节提要中创建的高度约束来设置。
只是为了补充这个惊人的答案,2014,如果你:
[self.textView sizeToFit];
只有 iPhone6+ 的行为有所不同:
只有 6+(不是 5s 或 6)它确实向 UITextView 添加了“一个空白行”。 “RL 解决方案”完美地解决了这个问题:
CGRect _f = self.mainPostText.frame;
_f.size.height = self.mainPostText.contentSize.height;
self.mainPostText.frame = _f;
它修复了 6+ 的“额外行”问题。
【讨论】:
你拯救了我的一天。我正在为忘记这一点的 selfCalculating 类函数扩展而苦苦挣扎。谢谢。 啊哈!我正在设置文本视图高度,然后调整包含视图的高度。显然,当我这样做时,正在调整文本视图高度。首先设置包含视图的高度会使事情按预期工作(或者,更好,希望)。 使用 [_textView sizeToFit] 刷新 contentSize 属性,无需事先将其添加到 scrollView。 如果使用自动布局,请在 superview 上调用layoutIfNeeded
。然后就可以从contentSize
抓取高度了。
这是关于调整外部容器的大小。这种行为在 iOS 7 中发生了变化。我在链接的问题中显示了在哪里添加 sizeToFit 和 layoutIfNeeded。【参考方案3】:
更新
您需要做的关键是在 UITextView 中关闭滚动。
myTextView.scrollEnabled = @NO
原答案
为了在UITableViewCell
中动态调整UITextView
的大小,我发现以下组合适用于Xcode 6 和iOS 8 SDK:
将UITextView
添加到UITableViewCell
并将其约束到两侧
将UITextView
的scrollEnabled
属性设置为NO
。启用滚动后,UITextView
的框架与其内容大小无关,但禁用滚动时,两者之间存在关系。
如果您的表格使用原始默认行高 44,那么它将自动计算行高,但如果您将默认行高更改为其他值,您可能需要在 @ 中手动开启自动计算行高987654330@:
tableView.estimatedRowHeight = 150;
tableView.rowHeight = UITableViewAutomaticDimension;
对于只读动态调整UITextView
s 的大小,就是这样。如果您允许用户编辑您的 UITextView
中的文本,您还需要:
实现UITextViewDelegate
协议的textViewDidChange:
方法,并告诉tableView
在每次编辑文本时重新绘制自己:
- (void)textViewDidChange:(UITextView *)textView;
[tableView beginUpdates];
[tableView endUpdates];
别忘了在某处设置UITextView
委托,在Storyboard
或tableView:cellForRowAtIndexPath:
中
【讨论】:
对我来说最好的答案。完美运行,iOS 5 中添加了 UITableViewAutomaticDimension,因此它向后兼容。 不太适合我。 textViewDidChange 方法会导致我的表格视图在我每次输入字符时弹跳。我建议不要在 tableView 中使用该方法:cellForRowAtIndexPath 方法,对于上面带有 textview 的行,如果您处于只读模式,则将 .scrollEnabled 设置为 NO,并且如果您处于编辑视图集中滚动启用为 YES。这样,当仅显示时,它将始终显示全文,并且在编辑时将从全文开始,并且当您添加更多文本时,将保持相同的大小,而较早的文本会从顶部滚动 此外,我在文本视图中添加了 >= 高度约束,因为空文本字段没有高度,无法点击开始编辑。 优秀的解决方案。对我来说,tableView.rowHeight = UITableViewAutomaticDimension
是不必要的。
再次感谢布雷特·唐纳德!我忘了怎么做,一年多后又找到了你的答案?。【参考方案4】:
使用代码和情节提要的非常简单的解决方案。
按代码
textView.scrollEnabled = false
按故事板
取消选中启用滚动
除此之外不需要做任何事情。
【讨论】:
这个答案是正确的。在 StoryBoard 中,您拥有 TextView AutoSize,就像 UILabel 一样。我们需要做的就是设置 scrollEnabled=false。 基本上,这是正确的:如果您使用 Autolayout 约束并关闭滚动,则一切正常。 非常感谢。就是这么简单,只要在故事板或代码中禁用滚动,它就会像 UILabel 的第 0 行。 @Mansuu.... 这不是一个有保证的解决方案,因为您可以采取一些措施来覆盖内在内容大小,并且如果您在视图布局后更改文本除非您也进行设置,否则不会更新。但是,对于在文本字段上设置 numberOfLines = 0 来说,这些事情仍然成立。如果这不起作用,您可能有其他约束会隐式设置高度。 @iOS 如果要添加高度约束,则将约束优先级降低,否则将不起作用。【参考方案5】:斯威夫特:
textView.sizeToFit()
【讨论】:
另外,我发现我需要将滚动启用设置为 false 才能工作。textView.scrollEnabled = false
你应该记得在 textView.sizeToFit() 之后调用 textView.layoutIfNeeded()
@tmarkiewicz 当文本适合您设备的屏幕时它可以工作,但是当您的文本大于屏幕上的空间时就会出现问题。您将无法滚动它以查看其余文本。
这就是答案!!!不需要更复杂的解决方案!!! @FranciscoRomero 为什么不将文本视图放在表格单元格或集合视图单元格中,那么您可以随时滚动表格或集合视图....【参考方案6】:
根据我的(有限的)经验,
- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode
不尊重换行符,因此您可以得到比实际需要的更短的CGSize
。
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size
似乎确实尊重换行符。
此外,文本实际上并未呈现在 UITextView
的顶部。在我的代码中,我将UITextView
的新高度设置为比sizeOfFont
方法返回的高度大24 像素。
【讨论】:
获得的大小就像在 UILabel 上绘制文本一样。如果您将该大小设置为 uitextview 的框架,那么您仍然需要在其中进行一些滚动。【参考方案7】:在 iOS6 中,您可以在设置文本后立即检查 UITextView 的contentSize
属性。在 iOS7 中,这将不再起作用。如果要在 iOS7 中恢复这种行为,请将以下代码放在 UITextView 的子类中。
- (void)setText:(NSString *)text
[super setText:text];
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
CGRect rect = [self.textContainer.layoutManager usedRectForTextContainer:self.textContainer];
UIEdgeInsets inset = self.textContainerInset;
self.contentSize = UIEdgeInsetsInsetRect(rect, inset).size;
【讨论】:
在哪里可以了解更多信息?对于 iOS 7 中关于此的看似新的行为,我完全迷失了。 变量CGSize size是什么意思? 我删除了大小,它不应该在那里。【参考方案8】:我将在页面底部发布正确的解决方案,以防有人勇敢(或绝望)阅读到这一点。
这里是那些不想阅读所有文本的人的 gitHub 存储库:resizableTextView
这适用于 iOs7(我相信它也适用于 iOs8)和自动布局。您不需要幻数,禁用布局和类似的东西。简短而优雅的解决方案。
我认为,所有与约束相关的代码都应该转到updateConstraints
方法。所以,让我们自己创建ResizableTextView
。
我们在这里遇到的第一个问题是在viewDidLoad
方法之前不知道真实的内容大小。我们可以走很长的路,根据字体大小、换行符等来计算它。但是我们需要强大的解决方案,所以我们会这样做:
CGSize contentSize = [self sizeThatFits:CGSizeMake(self.frame.size.width, FLT_MAX)];
所以现在无论我们身在何处,我们都知道真正的 contentSize:在viewDidLoad
之前或之后。现在在 textView 上添加高度约束(通过故事板或代码,无论如何)。我们将使用 contentSize.height
调整该值:
[self.constraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *constraint, NSUInteger idx, BOOL *stop)
if (constraint.firstAttribute == NSLayoutAttributeHeight)
constraint.constant = contentSize.height;
*stop = YES;
];
最后要做的就是告诉超类updateConstraints
。
[super updateConstraints];
现在我们的类看起来像:
ResizableTextView.m
- (void) updateConstraints
CGSize contentSize = [self sizeThatFits:CGSizeMake(self.frame.size.width, FLT_MAX)];
[self.constraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *constraint, NSUInteger idx, BOOL *stop)
if (constraint.firstAttribute == NSLayoutAttributeHeight)
constraint.constant = contentSize.height;
*stop = YES;
];
[super updateConstraints];
漂亮又干净,对吧?而且您不必在 控制器 中处理该代码!
等一下! 没有动画!
您可以轻松地为更改设置动画以使textView
平滑拉伸。这是一个例子:
[self.view layoutIfNeeded];
// do your own text change here.
self.infoTextView.text = [NSString stringWithFormat:@"%@, %@", self.infoTextView.text, self.infoTextView.text];
[self.infoTextView setNeedsUpdateConstraints];
[self.infoTextView updateConstraintsIfNeeded];
[UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionLayoutSubviews animations:^
[self.view layoutIfNeeded];
completion:nil];
【讨论】:
使用CGFLOAT_MAX
,而不是FLT_MAX
。
我希望我能给你一个以上的投票支持这个很棒的解决方案!【参考方案9】:
你试过[textView sizeThatFits:textView.bounds]
吗?
编辑:sizeThatFits 返回大小,但实际上并没有调整组件的大小。我不确定这是否是您想要的,或者 [textView sizeToFit]
是否更符合您的要求。无论哪种情况,我都不知道它是否完全符合您想要的内容,但这是首先要尝试的。
【讨论】:
sizetofit 节省一天【参考方案10】:另一种方法是使用NSString
方法查找特定字符串将占用的大小:
-(CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size
这将返回适合给定字符串和给定字体的矩形大小。传入具有所需宽度和最大高度的尺寸,然后您可以查看返回的高度以适合文本。有一个版本也可以让您指定换行模式。
然后您可以使用返回的大小来更改视图的大小以适应。
【讨论】:
【参考方案11】:我们可以通过约束来做到这一点。
-
为 UITextView 设置高度约束。
2.为该高度约束创建 IBOutlet。
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *txtheightconstraints;
3.不要忘记为您的文本视图设置委托。
4.
-(void)textViewDidChange:(UITextView *)textView
CGFloat fixedWidth = textView.frame.size.width;
CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
CGRect newFrame = textView.frame;
newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
NSLog(@"this is updating height%@",NSStringFromCGSize(newFrame.size));
[UIView animateWithDuration:0.2 animations:^
_txtheightconstraints.constant=newFrame.size.height;
];
然后像这样更新你的约束:)
【讨论】:
这是一个了不起的昵称! 设置常量需要后跟[textView layoutIfNeeded];在动画块中。 (自动布局动画就是这样做的。)【参考方案12】:如果您没有方便的UITextView
(例如,您正在调整表格视图单元格的大小),则必须通过测量字符串来计算大小,然后计算每个字符串的 8 pt 填充UITextView
的一侧。例如,如果您知道文本视图所需的宽度并想计算出相应的高度:
NSString * string = ...;
CGFloat textViewWidth = ...;
UIFont * font = ...;
CGSize size = CGSizeMake(textViewWidth - 8 - 8, 100000);
size.height = [string sizeWithFont:font constrainedToSize:size].height + 8 + 8;
这里,每个 8 代表四个填充边缘之一,而 100000 只是作为一个非常大的最大尺寸。
在实践中,您可能希望在高度上添加一个额外的font.leading
;这会在您的文本下方添加一个空行,如果文本视图正下方有视觉上沉重的控件,这可能会更好看。
【讨论】:
iOS 8.1 完美结果 填充是我的关键【参考方案13】:从 iOS 8 开始,可以使用 UITableView 的自动布局功能来自动调整 UITextView 的大小,而无需任何自定义代码。我在github 中放了一个项目来演示这一点,但这里是关键:
-
UITextView 必须禁用滚动,您可以通过编程方式或通过界面生成器执行此操作。如果启用滚动,它将不会调整大小,因为滚动可让您查看更大的内容。
在 UITableViewController 的 viewDidLoad 中,您必须为estimatedRowHeight 设置一个值,然后将
rowHeight
设置为UITableViewAutomaticDimension
。
- (void)viewDidLoad
[super viewDidLoad];
self.tableView.estimatedRowHeight = self.tableView.rowHeight;
self.tableView.rowHeight = UITableViewAutomaticDimension;
-
项目部署目标必须是 iOS 8 或更高版本。
【讨论】:
不鼓励这种答案。您应该在此处发布相关代码。【参考方案14】:结合迈克麦克马斯特的回答,您可能想要执行以下操作:
[myTextView setDelegate: self];
...
- (void)textViewDidChange:(UITextView *)textView
if (myTextView == textView)
// it changed. Do resizing here.
【讨论】:
【参考方案15】:我找到了一种方法,可以根据其中的文本调整文本字段的高度,并根据文本字段的高度在其下方排列一个标签!这是代码。
UITextView *_textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 10, 300, 10)];
NSString *str = @"This is a test text view to check the auto increment of height of a text view. This is only a test. The real data is something different.";
_textView.text = str;
[self.view addSubview:_textView];
CGRect frame = _textView.frame;
frame.size.height = _textView.contentSize.height;
_textView.frame = frame;
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 5 + frame.origin.y + frame.size.height, 300, 20)];
lbl.text = @"Hello!";
[self.view addSubview:lbl];
【讨论】:
这里的 '5' in y - UILabel 的坐标是我想要的 textView 和 Label 之间的间隙。【参考方案16】:如果您使用自动布局并且您的 sizetofit 不起作用,那么请检查您的宽度限制一次。如果您错过了宽度限制,那么高度将是准确的。
无需使用任何其他 API。只需一行就可以解决所有问题。
[_textView sizeToFit];
在这里,我只关心高度,保持宽度固定,并错过了我的 TextView 在情节提要中的宽度限制。
这是为了显示来自服务的动态内容。
希望这可能会有所帮助..
【讨论】:
【参考方案17】:以下内容就足够了:
-
请记住将您的
UITextView
的scrolling enabled 设置为NO:
-
正确设置自动布局约束。
你甚至可以使用UITableViewAutomaticDimension
。
【讨论】:
【参考方案18】:我查看了所有答案,所有答案都保持固定宽度并仅调整高度。如果你也想调整宽度,你可以很容易地使用这个方法:
所以在配置你的文本视图时,设置滚动禁用
textView.isScrollEnabled = false
然后在委托方法func textViewDidChange(_ textView: UITextView)
中添加这段代码:
func textViewDidChange(_ textView: UITextView)
let newSize = textView.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude))
textView.frame = CGRect(origin: textView.frame.origin, size: newSize)
输出:
【讨论】:
委托方法没有被调用@Peter Stajger【参考方案19】:使用 UITextViewDelegate 是最简单的方法:
func textViewDidChange(_ textView: UITextView)
textView.sizeToFit()
textviewHeight.constant = textView.contentSize.height
【讨论】:
【参考方案20】:禁用滚动
添加约束
并添加您的文字
[yourTextView setText:@"your text"];
[yourTextView layoutIfNeeded];
如果你使用UIScrollView
,你也应该添加这个;
[yourScrollView layoutIfNeeded];
-(void)viewDidAppear:(BOOL)animated
CGRect contentRect = CGRectZero;
for (UIView *view in self.yourScrollView.subviews)
contentRect = CGRectUnion(contentRect, view.frame);
self.yourScrollView.contentSize = contentRect.size;
【讨论】:
【参考方案21】:当我需要使 UITextView
中的文本适合特定区域时,这很有效:
【讨论】:
【参考方案22】:这是@jhibberd 的快速版本
let cell:MsgTableViewCell! = self.tableView.dequeueReusableCellWithIdentifier("MsgTableViewCell", forIndexPath: indexPath) as? MsgTableViewCell
cell.msgText.text = self.items[indexPath.row]
var fixedWidth:CGFloat = cell.msgText.frame.size.width
var size:CGSize = CGSize(width: fixedWidth,height: CGFloat.max)
var newSize:CGSize = cell.msgText.sizeThatFits(size)
var newFrame:CGRect = cell.msgText.frame;
newFrame.size = CGSizeMake(CGFloat(fmaxf(Float(newSize.width), Float(fixedWidth))), newSize.height);
cell.msgText.frame = newFrame
cell.msgText.frame.size = newSize
return cell
【讨论】:
这个问题与语言无关。真的有必要回去为 UIKit 相关问题的所有答案编写 swift 端口吗?似乎这样会造成嘈杂的谈话。 这些问题大多没有具体的编程语言,所以即使你搜索swift语言你也可以在google找到它【参考方案23】:对于 iOS 7.0,不要将 frame.size.height
设置为 contentSize.height
(目前什么都不做),而是使用 [textView sizeToFit]
。
见this question。
【讨论】:
【参考方案24】:这适用于 Swift 5,以防您希望在用户即时写入文本后适应您的 TextView。
只需使用 UITextViewDelegate 实现:
func textViewDidChange(_ textView: UITextView)
let newSize = textView.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude))
textView.frame.size = CGSize(width: newSize.width, height: newSize.height)
【讨论】:
【参考方案25】:如果有其他人来这里,这个解决方案对我有用,1"Ronnie Liew"+4"user63934"(我的文本来自网络服务): 注意 1000(“在我的情况下”没有什么可以这么大)
UIFont *fontNormal = [UIFont fontWithName:FONTNAME size:FONTSIZE];
NSString *dealDescription = [client objectForKey:@"description"];
//4
CGSize textSize = [dealDescription sizeWithFont:fontNormal constrainedToSize:CGSizeMake(containerUIView.frame.size.width, 1000)];
CGRect dealDescRect = CGRectMake(10, 300, containerUIView.frame.size.width, textSize.height);
UITextView *dealDesc = [[[UITextView alloc] initWithFrame:dealDescRect] autorelease];
dealDesc.text = dealDescription;
//add the subview to the container
[containerUIView addSubview:dealDesc];
//1) after adding the view
CGRect frame = dealDesc.frame;
frame.size.height = dealDesc.contentSize.height;
dealDesc.frame = frame;
那就是……干杯
【讨论】:
【参考方案26】:希望这会有所帮助:
- (void)textViewDidChange:(UITextView *)textView
CGSize textSize = textview.contentSize;
if (textSize != textView.frame.size)
textView.frame.size = textSize;
【讨论】:
这行不通!它会导致错误:“需要左值作为赋值的左操作数” 只能分配给textView.frame
。【参考方案27】:
我发现根据文本大小重新调整 UITextView 高度的最佳方法。
CGSize textViewSize = [YOURTEXTVIEW.text sizeWithFont:[UIFont fontWithName:@"SAMPLE_FONT" size:14.0]
constrainedToSize:CGSizeMake(YOURTEXTVIEW.frame.size.width, FLT_MAX)];
或者你可以使用
CGSize textViewSize = [YOURTEXTVIEW.text sizeWithFont:[UIFont fontWithName:@"SAMPLE_FONT" size:14.0]
constrainedToSize:CGSizeMake(YOURTEXTVIEW.frame.size.width, FLT_MAX) lineBreakMode:NSLineBreakByTruncatingTail];
【讨论】:
【参考方案28】:对于那些希望 textview 实际向上移动并保持底线位置的人
CGRect frame = textView.frame;
frame.size.height = textView.contentSize.height;
if(frame.size.height > textView.frame.size.height)
CGFloat diff = frame.size.height - textView.frame.size.height;
textView.frame = CGRectMake(0, textView.frame.origin.y - diff, textView.frame.size.width, frame.size.height);
else if(frame.size.height < textView.frame.size.height)
CGFloat diff = textView.frame.size.height - frame.size.height;
textView.frame = CGRectMake(0, textView.frame.origin.y + diff, textView.frame.size.width, frame.size.height);
【讨论】:
【参考方案29】:唯一可以使用的代码是在上面的 jhibberd 答案中使用“SizeToFit”的代码,但实际上除非您在 ViewDidAppear 中调用它或将其连接到 UITextView 文本更改,否则它不会被接收事件。
【讨论】:
【参考方案30】:根据 Nikita Take 的回答,我在 Swift 中找到了以下解决方案,该解决方案适用于带有自动布局的 iOS 8:
descriptionTxt.scrollEnabled = false
descriptionTxt.text = yourText
var contentSize = descriptionTxt.sizeThatFits(CGSizeMake(descriptionTxt.frame.size.width, CGFloat.max))
for c in descriptionTxt.constraints()
if c.isKindOfClass(NSLayoutConstraint)
var constraint = c as! NSLayoutConstraint
if constraint.firstAttribute == NSLayoutAttribute.Height
constraint.constant = contentSize.height
break
【讨论】:
以上是关于如何根据内容调整 UITextView 的大小?的主要内容,如果未能解决你的问题,请参考以下文章