2013-09-23 74 views
11

我已經將UITabBar設置爲Storyboard中的不透明,但我似乎仍然是透明的。當我設置我的自定義UITabBarController setBarStyle只有OpaqueBlack availible。Autolayout忽略iOS7上的UITabBar(條內容)

但這是最少的問題。不管我做什麼,我的視圖的內容都被定位在標籤欄下,就像它被ayutolayout忽略一樣。在故事板上一切看起來都很好。運行時會出現什麼問題?

哦,最重要的事情。該問題僅在iOS7上發生!

這裏是我的ViewController設置在故事板:

enter image description here

這裏是有問題的內容(UITableView的),它被定位在ios7應用的UITabBar下。在故事板看起來很好,但:

enter image description here

最後的UITableView約束:

enter image description here

回答

21

viewDidLoad把這個,解決了這個問題:

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { 
    [self setEdgesForExtendedLayout:UIRectEdgeNone]; 
} 
+1

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

+5

而不是檢查特定版本,最好檢查選擇器的存在:'if([selfrespondsToSelector:@selector(setEdgesForExtendedLayout :) :))' – DarkDust

4

創建這些macros您項目的<projectname>-Prefix.pch文件,以便他們將全球工作:

#define SYSTEM_VERSION_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) 
#define SYSTEM_VERSION_GREATER_THAN(v)    ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) 
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 
#define SYSTEM_VERSION_LESS_THAN(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) 

然後在每一個viewControllerviewDidLoad方法把這個[super viewDidLoad]後,這是使用這個問題:

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) 
{ 
     [self setEdgesForExtendedLayout:UIRectEdgeNone]; 
} 
+4

而不是檢查特定版本,最好檢查選擇器的存在:'if([selfrespondsToSelector:@selector(setEdgesForExtendedLayout :)])' – DarkDust

9

的Xcode還提供了程序上的能力:你的故事板內

[self setEdgesForExtendedLayout:UIRectEdgeNone]; 

對於一個給定ViewController通過延伸邊緣部分:

enter image description here

只要禁止這兩個下最熱門酒吧在底部的酒吧選項。它們默認打開。

+0

謝謝,你的回答應該被接受。 – Blacky

0

In Swift UIRectEdgeNone is not available。你可以用下面的代碼實現同樣的效果:

edgesForExtendedLayout = []