2013-08-16 49 views
33

我運行在iOS6的和iOS7相同的應用程序具有NavigationBar.It運行良好的iOS6的,但是在iOS7,所有的觀點是有點像它沒有考慮到導航條都沒有。IOS 7 UIView的框架問題

我曾嘗試更改模擬指標選項中的topbar屬性,但它不起作用。它在iOS6中考慮按鈕對NavigationBar的位置,但在iOS7中,它從屏幕頂部考慮它。

這是什麼原因?

在此先感謝。

iOS 6 Screenshot

iOS 7 Screenshot

回答

53

您必須使用以下行修復它在你的觀點:它的iOS 7 UI轉換指南

中,如果你想改變佈局中使用edgesForExtendedLayout財產

例子中提到。

self.edgesForExtendedLayout = UIRectEdgeNone; 
+0

是的,它適合我。但我的應用程序有Tabbacontroller alos。其他的viewcontroller工作正常。在Tabbar視圖控制器中發佈。假設我有5個選項卡。 1.當我點擊選項卡(列表屏幕打開)它工作正常,當我點擊列表細節打開罰款。直到它的工作正常2.當我點擊標籤2(另一個列表)打開。那個時候當我點擊tab1比細節屏幕主視圖框架減少到64px。我試圖強行增加,但不工作..在這種情況下我能做些什麼? – Hitarth

+2

我覺得在設置這個屬性前最好檢查一下:'[selfrespondsToSelector:@selector(edgesForExtendedLayout)]' – jianpx

5

在這個答案的時候,iOS的7仍然是保密協議,所以這是不可能的編寫實際的解決方案。無論如何,我已經發布了一個只適用於註冊開發者的幫助鏈接。

====原貼:====

閱讀iOS 7 Transition Guide。其章節「更新用戶界面」解釋瞭如何解決您的問題。

+0

RTFM =下的一票! – TheRonin

+2

在我發佈iOS 7時,仍然處於NDA之下,所以唯一可能的幫助是指向只有註冊開發者才能訪問的官方指南。 – Tafkadasoh

+1

@Tafkadasoh我瞭解你的困境,並感謝你的努力,無論NDA如何。我會(恭敬地)建議,如果你在原始答案中提到了NDA,那麼你會得到更好的服務,然後詳細說明在哪裏找到問題的答案,即:「這仍然在NDA之下;但是,它被記錄在iOS7轉換指南的第NNN頁上「。這樣,你會創建一個更直接有用的答案,而不是打開自己的倒計時。 –

14

在「的iOS 7 UI轉換指南」用於佈局和外觀一個還提到 - 在iOS7中,視圖控制器使用完整的屏幕布局。

如果我們想在視圖顯示在導航欄下面的位置,可以修改UIViewController的edgesForExtendedLayout這個屬性來實現的。

edgesForExtendedLayout是一種類型UIExtendedEdge屬性,指定的邊緣的方向上延伸。

因爲iOS7鼓勵全屏幕布局,它的默認值是很自然的是UIRectEdgeAll,四周邊緣都延伸,也就是說,如果連視圖的導航欄,的TabBar下,那麼該視圖將延伸覆蓋到周邊地區。

如果我們做如下設置視圖,那麼該視圖將不會延長對這些酒吧的後面,所以標籤就出來了。 查看源打印

self . edgesForExtendedLayout = UIRectEdgeNone ; 
+1

使用'edgesForExtendedLayout'對我來說並沒有什麼竅門。我將它添加到viewDidLoad方法中。任何幫助將是可觀的。 – Priyanka

+0

我已經在4-5應用中實現了它的工作。你能描述一下你的場景嗎? – PK86

+0

我也確認。它的工作原理,你必須把它在每個窗口 –

8

在iOS系統7,視圖控制器使用全畫面打印格式。

if([UIViewController instancesRespondToSelector:@selector(edgesForExtendedLayout)]) 

     self.edgesForExtendedLayout=UIRectEdgeNone; 
+1

是的,它適合我。但我的應用程序有Tabbacontroller alos。其他的viewcontroller工作正常。在Tabbar視圖控制器中發佈。假設我有5個選項卡。 1.當我點擊選項卡(列表屏幕打開)它工作正常,當我點擊列表細節打開罰款。直到它的工作正常2.當我點擊標籤2(另一個列表)打開。那個時候當我點擊tab1比細節屏幕主視圖框架減少到64px。我試圖強行增加,但不工作..在這種情況下我能做些什麼? – Hitarth

3
if([self respondsToSelector:@selector(edgesForExtendedLayout)]) 
    [self setEdgesForExtendedLayout:UIRectEdgeBottom]; 
5

我也有類似的問題,我發現,如果你關掉半透明導航欄的意見,將下拉相同,因爲他們在iOS6的那樣。

self.navigationController.navigationBar.translucent = NO; 
+0

這太棒了!節省了我幾個小時的工作。謝謝。 –