iOS 11: UICollectionView: при появлении происходит прокрутка

когда мой UIViewController появляется с UICollectionView внутри, содержимое немного прокручивается вверх при появлении.

Я реализовал scrollViewDidScroll: и записываю contentOffset.y:

-20.000000
-20.000000
0.000000
0.000000

Это происходит только на iOS 11 (симулятор и устройство), а не на iOS 10 или iOS 9. Кто-нибудь еще сталкивался с этим?

EDIT ОЧЕНЬ СТРАННАЯ вещь: это происходит только тогда, когда viewDidLoad НЕ вызывается, поэтому, например. когда UIViewController уже существует и снова появляется, но не при первом показе этого UIViewController...


person swalkner    schedule 24.08.2017    source источник
comment
Вы пытались отключить automaticallyAdjustsScrollViewInsets на своем ViewController?   -  person vmeyer    schedule 30.08.2017
comment
да... дополнительная информация: пожалуйста, смотрите мое редактирование   -  person swalkner    schedule 30.08.2017
comment
У вас есть строка состояния, отображаемая в вашем ViewController?   -  person vmeyer    schedule 30.08.2017


Ответы (1)


В iOS 11 contentInset.top можно добавить в UIScrollView и подклассы (UICollectionView, UITableView), в то время как строка состояния, панель навигации или другой контент отображаются в вашей иерархии представлений.

Эта вставка исходит из нового свойства AdjustContentInset. (документ: adjustedContentInset)

Чтобы удалить эту дополнительную вставку, установите для настройки вставки содержимого в вашем scrollView значение never :

[self.myScrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];

Дополнительная информация в видео WWDC17: Обновление приложения для iOS 11 в 19 мин.

person vmeyer    schedule 30.08.2017
comment
это так, спасибо большое! Все еще немного странно, так как в этом не было необходимости до некоторых изменений на моей стороне (даже на iOS 11), но, к сожалению, я точно не знаю, что вызвало это. Ничего, теперь работает, спасибо! - person swalkner; 30.08.2017
comment
Возможно, я понимаю, когда AdjustContentInset заполнен или нет: когда ваш scrollView прикреплен к верхней/нижней части вашего контроллера, добавляется AdjustContentInset, а когда он прикреплен к верхней/нижней направляющей макета, AdjustContentInset равен нулю! - person vmeyer; 31.08.2017
comment
Спасибо, так странно начинать с contentinset 0, а заканчивать на contentinset -64!! так что я только что узнал этот URL - person Einzeln; 07.09.2017
comment
Избегайте этого. Инженеры UIKit специально просят этого не делать. Ссылка: twitter.com/smileyborg/status/910656113653116928 Вместо этого используйте дополнительные SafeAreaInsets, чтобы увеличить safeAreaInsets. Или установите отрицательный contentInset, чтобы уменьшить/отменить скорректированныйContentInset. twitter.com/smileyborg/status/910656175800119296 - person Luis Ascorbe; 22.09.2017
comment
Спасибо за обновление @LuisAscorbe. Конечно, вы должны настроить поле содержимого прокрутки на safeAreaInsets, чтобы адаптировать макет к новому iPhone X. Однако иногда вам нужно, чтобы содержимое UIScrollView заполнило весь экран. - person vmeyer; 25.09.2017
comment
Большое спасибо. - person Saad; 31.10.2017
comment
Привет, @vmeyer. У меня та же проблема, когда я закрываю представленный в модальном режиме контроллер представления, но у представляющего контроллера нет никаких представлений коллекции или табличных представлений, это просто моя панель навигации, которая поднимается на 20. Есть ли у вас какие-либо предложения по этому поводу? Спасибо - person stan; 01.11.2017
comment
Привет, @stan, пожалуйста, задай свой вопрос в новой теме и дай нам больше информации. Ваша проблема может быть не связана с iOS 11. - person vmeyer; 02.11.2017