Как прокрутить UIScrollView при загрузке при использовании автоматической компоновки

У меня есть UIScrollView, который настроен в методе UIViewController для UIViewController (я назову его ScrollViewController ). В списке прокрутки содержатся страницы горизонтального содержимого (похожие на приложение для работы с погодой).

При отображении прокрутки вы должны выбрать, с какой страницы она начинается. Моя картина такова:

  • ScrollViewController . Здесь ничего особенного не происходит. По умолчанию свойство currentPage равно 0.
  • установите параметр scrollViewController.currentPage на нужный номер страницы.
  • в viewDidLoad от ScrollViewController , прочитайте self.currentPage и используйте scrollToRect или setContentOffset для прокрутки соответственно.

Реализация прокрутки кажется прекрасной, так как я использую тот же код в другом месте, чтобы перейти на определенные страницы. Но при первой загрузке ничего не происходит (т. Е. Прокрутка не прокручивается на нужную страницу).

Я думаю, что я нашел причину – кажется, что contentSize в представлении прокрутки (которое происходит с помощью autolayout remember) равно 0 во время viewDidLoad , и похоже, что это предотвращает прокрутку. Он также равен нулю во время просмотраWillAppear. Только в viewDidAppear работает прокрутка, что, конечно же, создает необычный пользовательский интерфейс.

Как я могу это решить? viewDidLoad ли каким-то образом создать макет в viewDidLoad ? Или какой-то другой подход?

viewDidLayoutSubviews – это то, что вы ищете. Это метод, при котором все кадры subviews полностью инициализируются. Итак, попробуйте вызвать свой метод настройки scrollView внутри него, в вашем viewController:

 -(void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; [self setupView]; } 

Вы должны установить размер содержимого вручную. Где вы вставляете страницы в прокрутку? Я бы предложил вставить их внутри viewDidLoad или viewWillAppear а затем прокручивать их до нужной страницы сразу после их вставки, установив свой contentOffset .

Interesting Posts
Давайте будем гением компьютера.