2013-09-23 2 views
11

Я установил UITabBar как непрозрачный в раскадровке, но я все еще, кажется, преувеличиваю. Когда я устанавливаю свой пользовательский UITabBarController с setBarStyle, доступен только OpaqueBlack.Autolayout игнорирует UITabBar (содержимое под панелью) на iOS7

Но это наименьшая проблема. Независимо от того, что я делаю, содержимое моего представления позиционируется под панелью вкладок, как будто оно игнорируется ayutolayout. На раскадровке все выглядит отлично. что-то запутывается во время выполнения?

О, самое главное. Проблема возникает только на iOS7!

Вот мои настройки ViewController в раскадровке:

enter image description here

И здесь является проблематичным содержание (UITableView), который получает расположен под UITabBar на ios7 приложение. Выглядит хорошо в раскадровке, хотя:

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 работает нормально. Ошибка в контроллере представления таблиц. предположим, что у меня 5 вкладок. 1. Когда я нажимаю на вкладку (открывается экран списка), она отлично работает, когда я нажимаю на подробное описание списка. до его рабочего уровня 2. Когда я нажимаю на вкладку 2 (другой список), открываю. это время, когда я нажимаю кнопку tab1, чем основной экран представления экрана, уменьшает до 64 пикселей. я пытался сильно увеличить, но не работает .. что я могу сделать в этом случае ?? – Hitarth

+5

Вместо проверки конкретной версии лучше проверить наличие селектора: 'if ([self responsesToSelector: @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) 

Затем поместите это после того, как [super viewDidLoad] в viewDidLoad методе каждого viewController, который с этой проблемой:

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

Вместо того, чтобы проверять конкретную версию, лучше проверить наличие селектора: 'if ([self responsesToSelector: @selector (setEdgesForExtendedLayout :))) – DarkDust

9

Xcode также обеспечивает programatic способность:

[self setEdgesForExtendedLayout:UIRectEdgeNone]; 

в раскадровку для данного ViewController через Расширьте края раздел:

enter image description here

Просто отключить оба Под Top Бары и Под нижней Bars вариантов. Они включены по умолчанию.

+0

Спасибо, вы должны быть приняты. – Blacky

0

В Swift UIRectEdgeNone не доступен. Вы можете сделать то же самое со следующим кодом:

edgesForExtendedLayout = [] 
Смежные вопросы