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}