你的主要問題是與MMDrawerController
。如果你會發現它,你會發現很多方法狀態欄相關的,如setShowsStatusBarBackgroundView
setStatusBarViewBackgroundColor
等等。狀態欄隱藏時,代碼中的某些內容會將視圖向上推。
或者,您可以使用另一個抽屜控制器或使用自定義代碼。
這裏有一個簡單的方法如何accomplishe此:
ViewControllerA:
-(BOOL)prefersStatusBarHidden
{
return _hidden;
}
- (void)statusHide
{
[UIView animateWithDuration:0.4 animations:^() {[self setNeedsStatusBarAppearanceUpdate];
}completion:^(BOOL finished){}];
}
ViewControllerB:(集裝箱ViewControllerA)
- (IBAction)move:(UIButton *)sender
{
parent = (ViewController*)self.parentViewController;
parent.hidden = !parent.hidden;
CGRect frame = parent.blueContainer.frame;
if(parent.hidden)
{
frame.origin.x = 150;
}
else
{
frame.origin.x = 0;
}
[UIView animateWithDuration:1 animations:^() {parent.blueContainer.frame = frame;}completion:^(BOOL finished){}];
[parent statusHide];
}
對於iOS 6 compatieblty使用:
[[UIApplication sharedApplication] setStatusBarHidden:_hidden withAnimation:UIStatusBarAnimationFade];
表視圖和其他子視圖將保留在它們的位置,不會被推高。
編輯:
添加導航欄:
的UINavigationController將改變其UINavigationBar的對 或者44點或64點的高度,這取決於一個相當奇怪和 無證組的約束。如果UINavigationController檢測到 其視圖框架的頂部與UIWindow的頂部在視覺上相連,則它將繪製其導航欄,其高度爲64 點。如果其視圖的頂部與UIWindow的頂部 不相連(即使僅關閉一個點),則它將以「傳統」方式繪製其導航欄,其高度爲44點。這個邏輯是由UINavigationController執行的 ,即使它是在您的應用程序的視圖控制器層次結構內的多個子級 。有 是沒有辦法來防止這種行爲。
從here
兩者你可以非常簡單地繼承UINavigationController
並創建自己的導航欄,以避免這種annoyness。
任何幫助讓我知道 – codercat
您使用的是自動佈局嗎? – Alladinian
難道不管應用程序設計爲隱藏或不隱藏狀態欄都顯示相同嗎?例如,通過對contentView的頂部使用約束而不是使用頂部佈局指南?這將解決-20px問題,但需要明顯調整應用程序。 – Taum