iOS 10.2 上 textView 的无限循环

Infinity cycle for textView on iOS 10.2

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

我试图解决这个问题并为 textView 添加了自定义 class。我重新定义了 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 永远不匹配。因此,视图被无限地布置。解决这个问题的办法是把这个改成[self layoutIfNeeded]; 这样会同步更新布局,解决这个问题。您的代码应如下所示。

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