2013-09-24 76 views
1

我正在更新我的應用程序以支持iOS7,但是我的一個視圖與狀態欄重疊。請參考我的形象,UIViewController without NavigationBar,UIView與狀態欄重疊

enter image description here

蘋果公司建議我們使用,self.edgesForExtendedLayout = UIRectEdgeNone;避免全屏佈局。然而,這是工作時,我們有UIViewControllerUINavigationController和導航欄可見。在我的應用程序中,我沒有使用UINavigationController。任何人都可以幫助我解決這個重疊的問題UIViewController沒有NavigationBar。

回答

0

你設置wantsFullScreenLayout = YES在ViewController的某個地方嗎?

+1

不,我沒有設置。也想在iOS7中棄用FullScreenLayout = YES。 – Nandha

0

只是抵消viewDidLoad中您的看法:

CGRect frame = self.view.frame; 
frame.y = 20; 
self.view.frame = frame; 
+0

狀態欄樣式不會導致此問題。狀態欄的風格是指其內容的外觀,其中包括時間,電池電量和Wi-Fi信號等項目。 – Nandha

+0

請參閱編輯。或檢查這裏 - http://stackoverflow.com/questions/18294872/ios-7-status-bar-back-to-ios-6-style/18855464#18855464 – StuartM

+0

我已經嘗試通過調整框架y的起源,但沒有運氣。 – Nandha

0

我這裏寫了一個完整的解釋:https://stackoverflow.com/a/18855464/1078579

簡短的回答是沒有辦法阻止的狀態欄,從iOS上的7重疊的應用程序。 edgesForExtendedLayout隻影響UINavigationController或UITabBarController中的子視圖控制器。

如果要保留iOS 6樣式佈局,則需要將應用的內容移動到(0,20,320,548)容器視圖中。在viewDidLoad中

if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) 
{ 
    self.edgesForExtendedLayout = UIRectEdgeNone; 
} 
0

添加以下代碼最後,我自己找到了答案。我們需要以抵消幀 - (void) viewDidLayoutSubviews方法類似如下,

- (void) viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 
    if([self respondsToSelector:@selector(edgesForExtendedLayout)]) 
    { 
     CGRect frame = self.view.frame; 
     frame.origin.y = 20; 
     frame.size.height = frame.size.height - 20; 
     self.view.frame = frame; 
    } 
} 

因爲我在- (void) viewDidLayoutSubviews方法ofSetting框架,用戶將不會看到過渡。如果我們抵消了-(void) viewDidload中的幀,用戶將看到轉換。希望這會幫助某人。

+0

如果沒有導航欄,它將不起作用。它只有在導航欄可見時才能使用。 – Nandha