Autolayout ignores UITabBar (content under the bar) on iOS7

空扰寡人 提交于 2020-01-01 04:31:50

问题


I've set UITabBar as Opaque in Storyboard, but i still seems to be transulcent. When I set my custom UITabBarController with setBarStyle there is only OpaqueBlack availible.

But that the least of the problem. No matter what I do, content of my view gets positioned under the tab bar, like it ignored by ayutolayout. On Storyboard everything looks fine. something messes up in the runtime?

Oh the most important thing. The problem occurs on iOS7 only!

Here are my ViewController settings in storyboard:

And here is problematic content (UITableView) which gets positioned under the UITabBar on ios7 app. Looks fine in storyboard though:

And finally UITableView constraints:


回答1:


Putting this on viewDidLoad, solves the problem:

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



回答2:


xCode also provides the programatic capability:

[self setEdgesForExtendedLayout:UIRectEdgeNone];

within your storyboard for a given ViewController via the Extend Edges section:

Simply disable both the Under Top Bars and Under bottom Bars options. They are on by default.




回答3:


create these macros in your project's <projectname>-Prefix.pch file so they will work globally:

#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)

Then put this after [super viewDidLoad] in viewDidLoad method of every viewController that's having this issue:

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



回答4:


In Swift UIRectEdgeNone is not available. You can achieve the same with the following code:

edgesForExtendedLayout = []


来源:https://stackoverflow.com/questions/18955973/autolayout-ignores-uitabbar-content-under-the-bar-on-ios7

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!