iPhone UIScrollView ContentSize имеет дополнительную высоту при повороте / преобразовании в альбомную ориентацию - PullRequest
4 голосов
/ 23 апреля 2010

Работая с iPhone, приложение работает хорошо.Тем не менее, у меня есть UIScrollView с автоматическим изменением размера контента и contentSize, который работает довольно хорошо, за исключением того, что когда я поворачиваюсь в альбомную ориентацию, он всегда имеет дополнительные 100 или около того пикселей на высоте прокрутки.Я не хочу, чтобы пользователи могли прокручивать контент до сих пор.

Кто-нибудь еще имел эту проблему или знает об исправлении?

заранее спасибо,

Michael

Ответы [ 2 ]

4 голосов
/ 19 июля 2010

У меня возникла такая же проблема. В моем случае я просматривал 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
}
0 голосов
/ 19 апреля 2012

у Zath есть интересное решение. Я столкнулся с подобным.

Я бы хотел сказать, что вы не обновляете свой contentSize после переключения на альбомную ориентацию, но contentSize должен быть одинаковым независимо.

По иронии судьбы у меня возникла противоположная проблема только сейчас. Однако после изучения суперпредставлений необходимо, чтобы для autoresizesSubviews было установлено значение yes, и, гарантируя, что все 4 суперпредставления имеют одинаковое свойство изменения размера, в конечном итоге сохраняется «буферное» пространство.

Много пробежек после настройки, и в итоге вы получите то, что хотите, если только вы не хотите, чтобы верхняя точка y оставалась на том же месте, когда она больше 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...