У меня возникла такая же проблема. В моем случае я просматривал UIScrollView, пытаясь динамически вычислить его contentSize. Зацикливаясь на подпредставлениях, я обнаружил два загадочных imageViews среди подпредставлений (не добавленных мною), которые вместе добавили в точности до 100 пикселей. Оказывается, что эти два изображения на самом деле являются индикатором прокрутки, который автоматически добавляется в представление прокрутки.
Моим решением было создать класс представления контейнера, назовем его ContainerView, и в нем я создал представление прокрутки.
Внутри этого ContainerView я переопределяю методы addSubview и willRemoveSubview, например:
- (void)addSubview:(UIView *)view {
[_addedSubviews addObject:view];
[_scrollView addSubview:view];
}
- (void)willRemoveSubview:(UIView *)subview {
[_addedSubviews removeObject:subview];
[_scrollView willRemoveSubview:subview];
}
Теперь вы можете добавить метод расчета размера. На этот раз мы перебираем массив _addedSubviews вместо подпредставлений scrollviews, потому что мы знаем, что представления внутри _addedSubviews - это только те, которые мы добавили. И из-за этого мы избежим зацикливания на индикаторах прокрутки и еще много чего: -)
И, наконец, просто перебрать и вычислить.
- (CGSize)desiredContentSize {
for(UIView *mySubviews in _addedSubviews) {
// Calculate size
}
// Return size
}