2013-11-15 3 views
3

В IOS 6, вы можете перейти к вершине UIScrollView с помощью:В iOS 7, как прокручивать верхнюю часть UIScrollView при использовании полупрозрачного UINavigationBar?

[scrollView setContentOffset:CGPointZero animated:YES]; 

Если вы используете этот код в прошивке 7 с полупрозрачный панелью навигации, вы получите результат, который технически правильно, но не удобный. Верх прокрутки будет помещен в начало экрана.

enter image description here

Как бы расположить в верхней части представления прокрутки в нижней части панели навигации вместо этого? Я ищу решение, которое не является жестко запрограммированным, потому что в моем приложении иногда можно скрывать строку состояния и панель навигации. Кроме того, я хотел бы сохранить полупрозрачный эффект вместо того, чтобы справляться и делать self.edgesForExtendedLayout = UIRectEdgeNone.

ответ

5

Вместо использования жестко закодированных значений, используйте новый API:

[self.scrollView setContentInset:UIEdgeInsetsMake(self.topLayoutGuide.length, 0, self.bottomLayoutGuide.length, 0)]; 

Вы настраиваете вставках содержимое представления прокрутки в верхней и нижней части направляющих макета. Поэтому, если у вас есть панель навигации, которая составляет 44 точки, а строка состояния - 20 точек, а строка состояния не будет, она будет на 64 пункта выше (на портрете) и на 0 пунктов ниже.

Вы должны сделать это в viewDidLayoutSubviews.

+0

Это работает. 'TopLayoutGuide' является' id ', поэтому, чтобы получить значение CGFloat, вам нужно использовать' topLayoutGuide.length'. – Pwner

+0

Да, конечно. Я обновил, спасибо за головы. –

0

Просто используйте -60 для координаты y или, еще лучше, получите динамическую высоту панели состояния и навигационной панели, потому что они оба изменяются.

См. Статус UIApplicationBarFrame и self.navigationController.navigationBar.bounds, я думаю.

1

Вы должны использовать этот метод -> setContentOffset: анимированные:

[_scrollView setContentOffset:CGPointZero animated:YES]; 
+0

Swift: 'self.scrollView.setContentOffset (CGPointZero, animated: true)' – Nathaniel

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