我目前在我们的应用中使用UITextView调试问题,导致其最后几行被切断。 UITextView
位于collectionView单元格内,该单元格允许自身折叠。我试图在帧的变化时抓住文本隐藏的执行,所以我在-[UITextView setFrame:]
上设置了一个符号断点,这将在设置collectionView时按预期暂停很多次。
但是,当我点击最小化按钮时,textView的框架会以某种方式改变它的原点和高度,但我从来没有接到setFrame:
的调用(或者至少我的断点永远不会得到当我扩展它时,我也永远不会打电话给setFrame:
,同时原点和高度也会改变。
我调用的唯一直接操作textView的代码是隐藏和取消隐藏它。隐藏后,我打电话给以下人员:
- (void)updateCollection {
[self.collection performBatchUpdates:nil completion:nil];
[self.amountCell updateTable];
[self.collection setNeedsLayout];
[self.collection layoutIfNeeded];
}
amountCell
与我正在处理的单元格无关,所以我不认为它与此有任何关系。不知何故,在隐藏UITextView
然后在collectionView上调用一些更新方法之间,框架会更改,而不会默认调用setFrame:
。这怎么可能?框架怎么可能被操纵?我错过了一些明显的东西吗?
答案 0 :(得分:1)
您可能会看到的一个地方是集合视图的-layoutSubviews
方法,当它确定需要更新布局时,框架将调用该方法,而您在调用-setNeedsLayout
时会暗示它会发生这种情况。 1}}和-layoutIfNeeded
。这是一个经常被忽视的“隐藏”影响者,特别是对于更高版本的iOS,更多的焦点转移到视图控制器和远离视图。