將視圖控制器添加到選項卡時,這是一個常見問題。
從蘋果公司的文件(Tab Bar Controllers - Tab Bars and Full-Screen Layout):
標籤欄控制器支持全屏幕布局不同於大多數其他控制器支持的方式。如果您希望其視圖在狀態欄或導航欄(如果存在)的下方,您仍然可以將自定義視圖控制器的wantsFullScreenLayout屬性設置爲YES。但是,將此屬性設置爲YES不會導致視圖與選項卡欄視圖重疊。標籤欄控制器總是調整您的視圖的大小,以防止它在標籤欄下面。
在代碼的話,你應該做到以下幾點:
UINavigationController *myNavController = [[UINavigationView alloc] init];
myNavController.wantsFullScreenLayout = YES;
//...
NSArray* controllers = [NSArray arrayWithObjects:myNavController, nil];
myTabBarController.viewControllers = controllers;
如果然而,你遇到的問題是,在比UIInterfaceOrientationPortrait
您myNavController
的動作來看其他方向打開應用程序時20像素離開屏幕頂部,那麼您將根據初始方向動態設置控制器的wantsFullScreenLayout
屬性(而不是上述解決方案)。 我用你的導航控制器實現定義一個靜態變量它:
static UIInterfaceOrientation _initialOrientation = -1;
之後,你需要重載viewDidAppear:
方法,並適當設置變量:
- (void)viewDidAppear:(BOOL)animated
{
if (_initialOrientation == -1)
_initialOrientation = [[UIApplication sharedApplication] statusBarOrientation];
self.wantsFullScreenLayout = (_initialOrientation != UIInterfaceOrientationPortrait);
[super viewDidAppear:animated];
}
希望這有助於。
爲什麼不調整幀中的每個旋轉'self.view.frame.size.height'? – 2011-03-03 16:55:33
@sudo - 是的,我已經做到了這一點,這有助於...但只有當設備旋轉!如果應用程序以縱向(按鈕向下)以外的任何方向啓動,則它看起來像上一個屏幕截圖。我試過的沒有任何調整消除了差距。 – 2011-03-03 17:01:33
他們嘗試將其設置爲[[UIScreen mainScreen]範圍] .size.height'? – 2011-03-03 17:03:49