UITextView,sizeToFit不起作用

3

我有一个UITextView,我想根据内容动态加载它,但是这个链接的答案在iOS11上不起作用。

https://dev59.com/jnvZa4cB1Zd3GeqP-g8N#20999067
  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;

唯一的方法就是使用约束更新约束。
CGFloat fixedWidth = self.textView .frame.size.width;
CGSize newSize = [self.textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
    self.textViewHeightConstraint.constant = newSize.height;

我正在开发一款通用应用程序,但是我不想在代码中使用太多的约束条件。有没有什么方法可以在不添加额外约束条件的情况下解决这个问题?


你的问题不清楚... 你想要做什么?为什么需要获取高度?何时需要获取高度? - undefined
我想在屏幕上显示一个带有超链接的段落,这个段落是从服务器获取的,所以在收到服务器响应之前,我不知道它的实际长度。然后我尝试了不同的方法来根据内容更新UITextView的高度,但除了更新约束之外,所有这些方法都失败了。 - undefined
好的 - 这仍然没有告诉我为什么您需要获取高度。您在Storyboard中设置了约束吗?如果您不设置bottom或height约束,则UITextView将自动调整其自身高度。设置顶部,前导和尾随约束。禁用滚动。根据需要设置数据检测器。根据需要设置可编辑和可选择性。现在,当您更改textview的文本时,它的高度将发生变化。无需使用sizeToFit或sizeThatFits或更改约束或强制布局子视图。 - undefined
我没有设置约束,只设置了高度 >= 10,然后 UITextView 没有根据内容自动调整高度。所以我不得不调用 layoutSubviews 来强制它根据内容大小布局内容。 - undefined
我创建了一个示例应用程序来演示:https://github.com/DonMag/TextViewAutoSize - undefined
2个回答

1

我尝试了layoutIfNeeded、setNeedsLayout等函数,但这些函数都无法调整UITextView的容器视图的大小,即使你改变了容器视图的大小,UITextView仍然保持原始大小。

在查看UITextView的UI层次结构后,我找到了一个简单的方法来调整UITextView的高度,那就是使用layoutSubviews函数。

[self.textview sizeToFit];
[self.textview layoutSubviews];

你可能需要在xib文件中设置textview的高度>=最小高度。
关于uitextview的动态高度有很多问题,我找不到答案,不幸的是我不能回复这些问题,如果你认为这个答案有帮助,请与其他类似的问题分享。

请注意,苹果文档指出不应直接调用layoutSubviews方法。它说明:"您不应直接调用此方法。如果您想强制进行布局更新,请在下一次绘制更新之前调用setNeedsLayout()方法来执行此操作。如果您希望立即更新视图的布局,请调用layoutIfNeeded()方法。" - undefined

1

我曾经有一个类似的问题,后来发现需要把 scrollingEnabled 设置为 false,然后 sizeToFit() 才有效。


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