У меня есть приложение, похожее на приложение для фотографий, где основным видом является UIScrollView
, который занимает полный размер экрана. экран. Кроме того, как и в приложении для фотографий, когда пользователь касается экрана, появляются и исчезают полупрозрачные панели навигации, состояния и инструментов.
У меня возникла проблема с настройкой основного представления UIViewControllers
как UIScrollView
и его размещением на всю длину экрана. Проблема в том, что когда отображаются строки навигации и состояния, UIScrollView
смещается вниз на высоту строк навигации и состояния (он не идет под ними, как предполагалось). Когда пользователь нажимает на экран, и строки навигации / состояния исчезают, он сбрасывается, чтобы занять всю длину экрана, как и предполагалось.
Простой обходной путь установки основного представления как UIView
и прикрепления UIScrollView
поверх него работает. Однако я хотел бы попытаться заставить это работать без каких-либо обходных путей (например, настройки UIScrollViews contentInset
и т. д.), потому что теоретически это должно работать.
Ниже приведен код, который я реализую:
- (void)loadView
{
self.wantsFullScreenLayout = YES;
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame: CGRectMake(0,0,320,480)];
scrollView.contentSize = CGSizeMake(320, 480);
scrollView.scrollEnabled = NO;
scrollView.contentOffset = CGPointZero;
scrollView.bounces = NO;
self.view = scrollView;
[scrollView release];
}
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.navigationController.navigationBar.translucent = YES;
[[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleBlackTranslucent animated: NO];
self.navigationController.toolbarHidden = NO;
self.navigationController.toolbar.barStyle = UIBarStyleBlack;
self.navigationController.toolbar.translucent = YES;
[self startTimer];
}
- (void) viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
self.navigationController.navigationBar.translucent = NO;
[[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleDefault animated: NO];
[self cancelTimer];
}
ОБНОВЛЕНИЕ: я заметил, что меняются contentOffset
и contentInset
, а не scrollViews
. ] Рамка.Когда полосы исчезли, а UIScrollView
имеет полный размер экрана (как и должно быть), contentOffset
и contentInset
выглядят следующим образом:
Content Offset: {0, -20}
Content Inset: {20, 0, 44, 0}
Когда полосы видны и UIScrollView
нажата вниз, contentOffset
и contentInset
выглядят следующим образом:
Content Offset: {0, -64}
Content Inset: {64, 0, 44, 0}