2014-01-10 4 views
0

У меня есть UIScrollView, который должен отображать список изображений один рядом друг с другом. Это код, я использую, чтобы добавить каждое изображение:UINavigationViewController изменяет поведение прокрутки в iOS7

#define SCROLL_PADDING 10 
#define SCROLL_DIMENSIONS 50 

view.frame = CGRectMake(xValue, SCROLL_PADDING, SCROLL_DIMENSIONS, SCROLL_DIMENSIONS); 
[scroller addSubview:view]; 

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

With navigation controller

Примечание 1: По умолчанию изображения не могут быть видны. Мне пришлось прокручивать вверх, чтобы сделать их видимыми.

Примечание 2: Нельзя прокручивать, потому что изображения должны соответствовать виду прокрутки.

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

Without navigation controller

Эта проблема возникает только в iOS7. Любые идеи почему?

ответ

0

Я наткнулся на это article, который четко объясняет различные изменения в барах состояния и навигации по iOS7

Как вы можете видеть, в обоих изображениях выше, положение точки зрения прокрутки не изменится. В iOS6, если кадр subview не изменяется, он будет перемещен вниз, чтобы предотвратить его перекрытие панели навигации. Начиная с iOS7 ожидается, что все подпункты будут перекрывать не только навигационную панель, но также строку состояния, которая делает расположение (0, 0) в левом верхнем углу экрана.

По какой-то причине я еще не понял (было бы неплохо, если бы кто-нибудь мог это объяснить), только в представлении прокрутки, где было перемещено так же, как это делалось в iOS6. Следовательно, создание подзонов появляется вне границ прокрутки.

Чтобы предотвратить подвиды от underlapping навигационной панели необходимо установить edgesForExtendedLayour в UIRectEdgeNone как можно раньше в жизненном цикле контроллера представления

viewController.edgesForExtendedLayout = UIRectEdgeNone; 
Смежные вопросы