Ответ 1
Полагая это на viewDidLoad
, решает проблему:
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
[self setEdgesForExtendedLayout:UIRectEdgeNone];
}
Я установил UITabBar как непрозрачный в раскадровке, но я все еще, кажется, преувеличиваю. Когда я устанавливаю свой пользовательский UITabBarController с setBarStyle
, доступен только OpaqueBlack.
Но это наименьшая проблема. Независимо от того, что я делаю, содержимое моего представления позиционируется под панелью вкладок, как будто оно игнорируется ayutolayout. На раскадровке все выглядит отлично. что-то запутывается во время выполнения?
О, самое главное. Проблема возникает только на iOS7!
Вот мои настройки ViewController в раскадровке:
И вот проблемный контент (UITableView), который позиционируется под UITabBar в приложении ios7. Выглядит отлично в раскадровке, хотя:
И, наконец, ограничения UITableView:
Полагая это на viewDidLoad
, решает проблему:
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
[self setEdgesForExtendedLayout:UIRectEdgeNone];
}
xCode также предоставляет программные возможности:
[self setEdgesForExtendedLayout:UIRectEdgeNone];
в вашем раскадровке для данного ViewController через раздел Расширить края:
Просто отключите параметры Under Top Bars и Under bottom Bars. По умолчанию они включены.
создайте эти 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];
}
В Swift UIRectEdgeNone
недоступно. Вы можете сделать то же самое со следующим кодом:
edgesForExtendedLayout = []