【问题标题】:UITextView, sizeToFit doesnt workUITextView,sizeToFit 不起作用
【发布时间】:2018-05-06 08:21:18
【问题描述】:

我有一个uitextview,我想根据内容动态加载它, 此链接的答案在 iOS11 上不起作用。 https://stackoverflow.com/a/20999067/365384

  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;

我正在开发一个通用应用程序,我不想在代码中使用太多约束。有什么方法可以在不增加额外约束的情况下修复它?

【问题讨论】:

  • 您的问题不清楚...您想做什么为什么你需要得到高度? 什么时候你需要得到高度?
  • 我想在屏幕上显示一个带有超链接的段落,该段落来自服务器,所以在我得到服务器的响应之前我不知道它的实际长度。然后我尝试了不同的方法来根据内容更新uitextview高度,除了更新约束之外,所有这些方法都失败了。
  • 好的 - 这仍然没有告诉我为什么你需要得到高度。您是否在情节提要中设置了约束? UITextView 会自动调整自己的高度,如果你允许的话。设置顶部、前导和尾随约束,但不要设置底部或高度约束。禁用滚动。根据需要设置数据检测器。根据需要设置 Editable 和 Selectable。现在,当您更改 textview 的文本时,它的高度会发生变化。不需要 sizeToFit 或 sizeThatFits 或更改约束或强制布局子视图。
  • 我没有设置约束,我只设置了 height >= 10,然后 UITextView 没有根据内容自动调整高度。所以我必须调用 layoutsubviews 来强制它根据内容大小布局内容。
  • 我放了一个示例应用来演示:github.com/DonMag/TextViewAutoSize

标签: ios uitextview sizetofit


【解决方案1】:

我试过layoutifneeds、setneedforlayout,所有这些功能都不会调整uitextview的containerview大小,即使你改变了containerview的大小,uitextview也会保持原来的大小。

查看 uitextview 的 UI 层次结构后,我发现调整 uitextview 高度的简单方法是 layoutsubviews。

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

您可能需要在 xib 文件中设置 textview height >= min height。

关于uitextview的动态高度有很多问题,我找不到这个答案,很遗憾我无法回复这些问题,如果您认为这个答案有帮助,请与其他类似问题分享。

【讨论】:

  • 请注意,Apple 文档指出不应直接调用 layoutSubviews。它指出:您不应该直接调用此方法。如果要强制更新布局,请在下一次绘图更新之前调用 setNeedsLayout() 方法。如果您想立即更新视图的布局,请调用 layoutIfNeeded() 方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
相关资源
最近更新 更多