自动布局忽略iOS7上的UITabBar(栏下的内容)
Posted
技术标签:
【中文标题】自动布局忽略iOS7上的UITabBar(栏下的内容)【英文标题】:Autolayout ignores UITabBar (content under the bar) on iOS7 【发布时间】:2013-09-23 09:34:36 【问题描述】:我在 Storyboard 中将 UITabBar 设置为不透明,但我似乎仍然是半透明的。当我使用setBarStyle
设置我的自定义 UITabBarController 时,只有 OpaqueBlack 可用。
但这是最小的问题。无论我做什么,我的视图内容都会位于标签栏下方,就像 ayutolayout 忽略它一样。在 Storyboard 上,一切看起来都很好。运行时出现问题?
哦,最重要的是。该问题仅出现在 ios7 上!
这是我在情节提要中的 ViewController 设置:
这是有问题的内容 (UITableView),它位于 ios7 应用程序的 UITabBar 下。不过在情节提要中看起来不错:
最后是 UITableView 约束:
【问题讨论】:
【参考方案1】:把这个放在viewDidLoad
上,问题就解决了:
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
[self setEdgesForExtendedLayout:UIRectEdgeNone];
【讨论】:
是的,它对我来说工作正常。但我的应用程序有 Tabbacontroller alos。视图控制器的其余部分工作正常。 Tabbar 视图控制器中的问题。假设我有 5 个标签。 1. 当我单击选项卡(打开列表屏幕)时,当我单击列表详细信息打开正常时,它工作正常。直到它工作正常 2. 当我点击选项卡 2(另一个列表)时打开。那个时候,当我点击 tab1 时,比细节屏幕主视图框架减少到 64px。我试图强行增加但没有工作..在这种情况下我该怎么办?? 与其检查特定版本,不如检查选择器是否存在:if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
【参考方案2】:
xCode 还提供了编程能力:
[self setEdgesForExtendedLayout:UIRectEdgeNone];
在给定 ViewController 的情节提要中,通过 Extend Edges 部分:
只需禁用 Under Top Bars 和 Under bottom Bars 选项。它们默认开启。
【讨论】:
【参考方案3】:在项目的<projectname>-Prefix.pch
文件中创建这些macros
,以便它们可以在全球范围内工作:
#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];
【讨论】:
与其检查特定版本,不如检查选择器是否存在:if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
【参考方案4】:
在 Swift 中 UIRectEdgeNone
不可用。您可以使用以下代码实现相同的目的:
edgesForExtendedLayout = []
【讨论】:
以上是关于自动布局忽略iOS7上的UITabBar(栏下的内容)的主要内容,如果未能解决你的问题,请参考以下文章
导航栏下的 UICollectionView,但标签栏下没有
一段时间后,ios7 UINavigationBar 在状态栏下停止扩展