ios - iOS 10.2 上 textView 的无限循环

标签 ios textview infinity layoutsubviews

我将库 - JVFloatLabeledTextField 连接到我的项目。 我在真实设备上启动,但问题可以在模拟器上重现(我尝试使用 iphone 7 plus iOS 10.2)。如果在 textView 中输入一些文本,则选择该文本并单击“全选”。应用程序将处于无限循环中,称为 layoutSubviews。

我试图解决这个问题并为 textView 添加了一个自定义类。我重新定义了 intrinsicContentSize,它可以工作,但还有其他困难。告诉我如何解决这个问题。测试项目已添加到我的存储库中: https://github.com/ed8009/textView-With-JVFloatLabeledTextView

最佳答案

您已确定问题所在。问题在于这部分代码。

if (!self.scrollEnabled && !CGSizeEqualToSize(self.bounds.size, [self intrinsicContentSize])) { 
 [self invalidateIntrinsicContentSize]; 
}

特别是,[self invalidateIntrinsicContentSize];

调用此方法时,intrinsicContentSize 和 self.bounds.size 永远不会匹配。因此, View 被无限地布置。解决这个问题的方法是将其更改为 [self layoutIfNeeded]; 这将同步更新布局并修复此问题。您的代码应如下所示。

if (!self.scrollEnabled && !CGSizeEqualToSize(self.bounds.size, [self intrinsicContentSize])) {
    [self layoutIfNeeded];
}

关于ios - iOS 10.2 上 textView 的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49093844/

相关文章:

c - 如何在 ANSI C 中生成 NaN、-Infinity 和 +Infinity?

android - 如何缩写一个TextView?

android - 将 Web 链接添加到 TextView 小部件

ios - 设置 HKAnchoredObjectQuery 以便我只接收自上次查询以来的更新?

ios - MOGenerator 和 NSOrderedSet

android - 如何在 Kotlin for Android 上使用 "setTextColor(hexaValue)",

javascript - 如何检查数字的计算结果是否为无穷大?

java - 将无穷大的值添加到数组中

ios - 在 subview Controller 中识别导航是弹出还是推送

iphone - iOS:在我的应用程序中启动 AppStore 页面