如何在不调用setFrame的情况下更改其框架

时间:2016-04-19 17:16:43

标签: ios objective-c

我目前在我们的应用中使用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:。这怎么可能?框架怎么可能被操纵?我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:1)

您可能会看到的一个地方是集合视图的-layoutSubviews方法,当它确定需要更新布局时,框架将调用该方法,而您在调用-setNeedsLayout时会暗示它会发生这种情况。 1}}和-layoutIfNeeded。这是一个经常被忽视的“隐藏”影响者,特别是对于更高版本的iOS,更多的焦点转移到视图控制器和远离视图。