更好的解決方案:
a)睡一覺。
B)意識到這一點,當你睡覺時,使用的'UIBarStyleBlackTranslucent'一直棄用,所以簡單地做這個:
- 開放的MainWindow.xib在Interface Builder中,在'Tab Bar Controller'內的'導航控制器'內選擇'UINavigationBar'項目,並將'Style'更改爲'Black Opaque'而不是半透明。
在你的UITableViewController類文件,寫
- (void)viewWillDisappear:(BOOL)animated {
self.navigationController.navigationBar.translucent = YES; /* Yes, go underneath the Navigation Bar elsewhere if you want to. */
[super viewWillDisappear:animated];
}
- (void)viewWillAppear:(BOOL)animated {
self.navigationController.navigationBar.translucent = NO; /* No going underneath the Navigation Bar. Problem solved! */
...
[super viewWillAppear:animated];
}
三)停止的感覺尷尬,而是實現睡眠,現在是如何在你的軍火庫一個更有用的編碼技術。 ,P
線索到正確的解決方案:
「導航控制器從未顯示一個不透明導航欄下內容」。
「將導航控制器的半透明屬性設置爲YES,這可以讓您的內容覆蓋導航欄。」
見:developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/NavigationControllers/NavigationControllers.html
見:developer.apple。COM/iphone /庫/文件/ UIKit的/參考/ UINavigationBar_Class /參考/ UINavigationBar.html#// apple_ref/OCC/instp/UINavigationBar的/半透明
UIBarStyle定義不同類型的視圖的樣式外觀...
UIBarStyleBlackTranslucent = 2,//棄用
使用UIBarStyleBlack和半透明屬性設置爲YES代替。
http://developer.apple.com/iphone/library/documentation/uikit/reference/UIKitDataTypesReference/Reference/reference.html
前睡覺,固定它
「辛苦」 ...
- (void)correctFrame:(UIView *)viewWithWrongFrame {
CGRect correctedFrame = [[viewWithWrongFrame superview] frame];
correctedFrame.size.height = correctedFrame.size.height - self.navigationController.navigationBar.frame.size.height; /* Height without Navigation Bar */
correctedFrame.origin.y = correctedFrame.origin.y + self.navigationController.navigationBar.frame.size.height; /* Origin below Navigation Bar */
[viewWithWrongFrame setFrame:correctedFrame];
}
- (void)viewDidLoad {
[super viewDidLoad];
...
[self correctFrame:[self.navigationController.view.subviews objectAtIndex:0]]; /* Correct the frame so it is after the Navigation Bar */
[self.tableView setContentInset:UIEdgeInsetsMake(-self.navigationController.navigationBar.frame.size.height, 0, 0, 0)]; /* Eliminate initial blank space at top.*/
...
}
- (void)cleanDisplay {
[self.tableView setContentInset:UIEdgeInsetsZero]; /* Fix difference between horizontal and vertical orientation. */
...
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
[self correctFrame:[self.navigationController.view.subviews objectAtIndex:0]]; /* Correct the frame so it is after the Navigation Bar */
/* Clean the display after turning... */
[self performSelectorOnMainThread:@selector(cleanDisplay) withObject:nil waitUntilDone:NO];
}
- (void)viewWillAppear:(BOOL)animated {
...
[self performSelectorOnMainThread:@selector(cleanDisplay) withObject:nil waitUntilDone:NO];
...
}
注意失敗方法包括:
使用一世nterface Builder將UITableView嵌入到UIView中。沒有工作,因爲它全部自動調整到全高。調整[self.tableView superview] .frame = CGRectInset([self.tableView superview] .frame,44,44); 或.bounds沒有效果, 既沒有self.tableView.frame也沒有.bounds。
當我嘗試時出現錯誤的線索: self.navigationController.view.frame = CGRectInset(self.navigationController.view.frame,20,44); 它實際上改變了其中的表的視圖的大小。顯然,將子視圖更改爲可以修復原始問題。
用上面的方法修正了它。雖然在移回或轉到其他屏幕之前,需要將變化恢復到正常狀態,以避免將元素轉移到其他地方。