通常の操作用のタブ バーとナビゲーション バーを備えたアプリがあります。私の画面の 1 つはテキストの大部分であるため、ユーザーがタップして全画面表示できるようにします (Photos.app のようなものです)。
ナビゲーション バーとタブ バーを非表示にし、テキスト ビューのフレームを全画面表示に設定しました。問題は、タブ バーがあった場所に約 50 ピクセルの余白があることです。このスクリーン ショットから次のことがわかります。
無効な ImageShack リンクを削除
何が原因なのかわかりません。念のために背景色を赤に設定しているため、空白はテキストビューの背後にあるビューではありません。何が原因でしょうか?
** アップデート **
UIWindow サブクラスでいくつかのヒット テストを行ったところ、空白が実際には文書化されていない/公開されていない UILayoutContainerView であることがわかりました。これは tabBar の親ビューです。このビューを直接操作することはお勧めできないと思います。どうすればタブ バーを非表示にできますか?
**更新#2 **
アニメーションの前後に self.view のフレームを確認したところ、親ビューのサイズが十分に変更されていないようです。
全画面表示にした後、ビューのフレームの高さはわずか 411 ピクセルです。フレームを手動でいじってみましたが、autoResizeMask を設定してもうまくいきませんでした。
**** 更新: これが最終結果です ****
- (void)toggleFullscreen {
isFullScreen = !isFullScreen; //ivar
//hide status bar & navigation bar
[[UIApplication sharedApplication] setStatusBarHidden:isFullScreen animated:YES];
[self.navigationController setNavigationBarHidden:isFullScreen animated:YES];
[UIView beginAnimations:@"fullscreen" context:nil];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:.3];
//move tab bar up/down
CGRect tabBarFrame = self.tabBarController.tabBar.frame;
int tabBarHeight = tabBarFrame.size.height;
int offset = isFullScreen ? tabBarHeight : -1 * tabBarHeight;
int tabBarY = tabBarFrame.origin.y + offset;
tabBarFrame.origin.y = tabBarY;
self.tabBarController.tabBar.frame = tabBarFrame;
//fade it in/out
self.tabBarController.tabBar.alpha = isFullScreen ? 0 : 1;
//resize webview to be full screen / normal
[webView removeFromSuperview];
if(isFullScreen) {
//previousTabBarView is an ivar to hang on to the original view...
previousTabBarView = self.tabBarController.view;
[self.tabBarController.view addSubview:webView];
webView.frame = [self getOrientationRect]; //checks orientation to provide the correct rect
} else {
[self.view addSubview:webView];
self.tabBarController.view = previousTabBarView;
}
[UIView commitAnimations];
}
(テキストビューをウェブビューに切り替えましたが、元のテキストビューでも同じことができます)