2015-07-23 4 views
1

У меня есть UIView, где я добавил UICollectionView. Теперь это представление отображается при запуске приложения. В то же время я просматриваю определенную позицию в моем представлении коллекции. Поэтому я использую scrollToItemAtIndexPath. Проблема в том, что она прокручивается в неправильную позицию, потому что представление коллекции имеет неправильный размер в начале: если вы запустите iPad в альбомной ориентации на iOS 7, просмотр коллекции всегда будет занимать 768 по ширине, несмотря на то, что он находится в ландшафте.scrollToItemAtIndexPath перед представлением отображается в первый раз

Как я могу прокрутить до определенной позиции, не заметив ее? Где я могу назвать это в иерархии представлений?

viewWillAppear: кадры не были установлены
viewDidAppear: не представляется возможным без пользователь замечая
layoutSubviews: это называется несколько раз, и мне это нужно только при запуске и когда пользователь нажимает на кнопку

I также пытался использовать layoutIfNeeded, но это не помогает для моего края (iOS 7, iPad, ландшафт при запуске).

+1

Ограничения, связанные с просмотром времениDidAppear и layoutSubviews вызывается в последний раз. К тому времени уже слишком поздно. Вы можете попробовать наследовать свой собственный класс из 'UICollectionView' и посмотреть, есть ли у его' layoutSubviews' правильные ограничения и вызывать 'scrollToIndex'. Если это не удается, вы можете обмануть, установив размеры кадра в viewDidLoad и вызывая прокрутку до индекса. (Этот бит немного сложнее) –

+0

@ iosDev82: Я попробовал свой первый описанный способ, используя логическое значение, так что он вызывается только один раз. Кроме того, я проверяю, больше ли ширина. С помощью этого apporach представление коллекции вообще не отображается, и я получаю следующий вывод в консоли: * отрицательные или нулевые размеры не поддерживаются в макете потока *. Без 'scrollToItemAtIndexPath', вызванного в' layoutSubviews' в представлении коллекции, все отображается в порядке (кроме положения прокрутки). Как проверить правильные ограничения? – testing

+0

Теперь я сделал это после вызова '[super layoutSubviews];' и, похоже, работает для первых тестов. Кроме того, я удалил анимацию. Я проверю его немного больше. Является ли это предполагаемым поведением Apple или это ошибка в iOS 7? – testing

ответ

1

Ограничения в течение времени viewDidAppear и layoutSubviews вызывается в последний раз. К тому времени уже слишком поздно.

Вы можете попробовать наследовать свой класс из UICollectionView и посмотреть, есть ли у его layoutSubviews правильные ограничения и позвонить scrollToIndex оттуда.

Если это не удается, вы можете обмануть, установив размеры кадров в viewDidLoad и вызывая прокрутку к индексу. (Этот бит немного сложнее)

Смежные вопросы