Ho un'applicazione come l'app foto dove la vista principale è una UIScrollView
che occupa l'intera dimensione dello schermo. Inoltre, come l'app per le foto, quando l'utente tocca lo schermo ci sono navigazione traslucida, stato e barre degli strumenti che riappaiono/scompaiono.Schermo intero UIScrollView non funziona correttamente
Ho riscontrato un problema nell'impostare la vista principale UIViewControllers
come UIScrollView
e occuparla per l'intera lunghezza dello schermo. Il problema è che quando vengono visualizzate le barre di navigazione e di stato, lo UIScrollView
viene spinto verso il basso dall'altezza delle barre di navigazione e di stato (non va al di sotto di esse come si suppone). Quando l'utente tocca lo schermo e le barre di navigazione/stato scompaiono, si reimposta automaticamente per occupare tutta la lunghezza dello schermo come si suppone.
Una semplice soluzione per impostare la vista principale come UIView
e allegare un UIScrollView
su di esso funziona. Tuttavia, mi piacerebbe provare a farlo funzionare senza soluzioni alternative (ad esempio, la regolazione dello UIScrollViews contentInset
, ecc.) In teoria dovrebbe funzionare.
Di seguito è il codice che sto attuazione:
- (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];
}
UPDATE: ho notato è il contentOffset
e contentInset
che stanno cambiando, non la cornice scrollViews
. Quando le barre sono scomparse e la UIScrollView
è la dimensione completa dello schermo (come dovrebbe essere), il contentOffset
e contentInset
sono i seguenti:
Content Offset: {0, -20}
Content Inset: {20, 0, 44, 0}
quando le barre sono visibili e la UIScrollView
viene spinto verso il basso, il contentOffset
e contentInset
sono i seguenti:
Content Offset: {0, -64}
Content Inset: {64, 0, 44, 0}
Ti benedica! Mi sono solo strappato i capelli. –