Полноэкранный UIScrollView работает неправильно

У меня есть приложение, похожее на приложение для фотографий, где основным видом является 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}
5
задан Ser Pounce 6 June 2012 в 01:02
поделиться