为什么Ios会忽略顶部栏及其下方的布局项?

为什么Ios会忽略顶部栏及其下方的布局项?,ios,interface-builder,autolayout,Ios,Interface Builder,Autolayout,我正在使用IB设计一个屏幕,在设计阶段,屏幕是这样的: 我使用自动布局,没有遗漏的约束。这是我使用模拟器运行它时的样子: 这是一个静坐,它不知道那里有一个不透明的顶部栏,并开始直接从顶部布局视图 有人知道为什么会这样吗 谢谢将以下代码添加到视图控制器中的viewDidLoad: if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) { self.edgesForExtendedLayout = UIR

我正在使用IB设计一个屏幕,在设计阶段,屏幕是这样的:

我使用自动布局,没有遗漏的约束。这是我使用模拟器运行它时的样子:

这是一个静坐,它不知道那里有一个不透明的顶部栏,并开始直接从顶部布局视图

有人知道为什么会这样吗


谢谢

将以下代码添加到视图控制器中的viewDidLoad:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
    self.edgesForExtendedLayout = UIRectEdgeNone;
}

您可以通过在iOS7 SDK中实现名为edgesForExtendedLayout的新属性来实现这一点。请添加以下代码以实现此目的

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;
您需要在-(void)viewDidLoad方法中添加上述内容

iOS 7为用户界面的布局和自定义外观带来了一些变化。视图控制器布局、着色颜色和字体的更改会影响应用程序中的所有UIKit对象。此外,对手势识别器API的增强使您能够更细粒度地控制手势交互

使用视图控制器

在iOS 7中,视图控制器使用全屏布局。同时,iOS 7为您提供了对视图控制器布局视图方式的更精确控制。特别是,对全屏布局的概念进行了改进,使视图控制器可以指定其视图的每个边缘的布局

iOS 7中不推荐使用WantFullScreenLayout视图控制器属性。如果当前指定了
wantsFullScreenLayout=NO
,则视图控制器在iOS 7中运行时可能会在意外的屏幕位置显示其内容

要调整视图控制器布局视图的方式,UIViewController提供以下属性:

边缘扩展布局

edgesForExtendedLayout属性使用UIRectEdge类型,除了指定none和all之外,还指定矩形的四条边中的每一条。使用edgesForExtendedLayout指定应延伸视图的哪些边,而不考虑条形图的半透明性。默认情况下,此属性的值为UIRectEdgeAll

扩展布局包括不透明条

如果您的设计使用不透明条,请同时将
extendedLayoutIncludesOpaqueBars
属性设置为“否”,以优化EdgesForExtendedLayoutineCludeSopaqueBars布局。(
extendedLayoutIncludesOpaqueBars
的默认值为“否”)

自动调整滚动视图插图

如果不希望自动调整滚动视图的内容插入,请将
automaticallyAdjustsScrollViewInsets
设置为“否”。
automaticallyAdjustsScrollViewInsets
的默认值为“是”。)

顶部布局指南、底部布局指南


topLayoutGuide
bottomLayoutGuide
属性指示视图控制器视图中顶部或底部栏边的位置。如果条形图应与视图的顶部或底部重叠,则可以使用Interface Builder通过创建到topLayoutGuide底部或
bottomLayoutGuide
顶部的约束来相对于条形图定位视图。(如果没有条与视图重叠,则topLayoutGuide的底部与视图的顶部相同,而topLayoutGuide的顶部与视图的底部相同。)这两个属性都是在请求时延迟创建的。

大小、状态栏、方向、顶栏、底栏仅在属性检查器中模拟,你所看到的,不是你得到的,只是模拟

要创建状态栏/底部栏/方向等,必须通过代码或.xib属性检查器/尺寸检查器来完成

对于状态栏,您可以看到


希望能有所帮助。

您需要关闭半透明功能。当它是半透明的时候,从技术上讲,一切都必须从顶栏下方开始。我该怎么做?我已使用propmpt将顶部栏设置为不透明。你只需要将代码中的半透明属性设置为no.
Translucent=no。我发现self.edgesForExtendedLayout=UIRectEdgeNone代码也可以工作,但对我来说最容易修复的是半透明属性。基本上,如果半透明的iOS允许其背后的东西。您只需将其降低70像素左右即可覆盖导航条。