为啥 Ios 会忽略它下面的顶部栏和布局项?
Posted
技术标签:
【中文标题】为啥 Ios 会忽略它下面的顶部栏和布局项?【英文标题】:why does Ios ignores top bar and layout items below it?为什么 Ios 会忽略它下面的顶部栏和布局项? 【发布时间】:2014-01-12 06:48:24 【问题描述】:我正在使用 IB 设计一个屏幕,在设计时屏幕是这样的:
我正在使用自动布局,并且没有缺少约束。这是我使用模拟器运行它时的样子:
它不知道那里有一个不透明的顶部栏,并直接从顶部开始布局视图。
有人知道为什么会这样吗?
谢谢
【问题讨论】:
您需要关闭半透明。当它是半透明的时,从技术上讲,一切都必须从顶部栏下方开始。 我该怎么做?我已使用 propmpt 将顶部栏设置为不透明。应该这样做吗? 您只需要将代码中的 Translucent 属性设置为 ViewDidLoad 上的 no。Translucent = NO;
。我发现self.edgesForExtendedLayout = UIRectEdgeNone;
代码也可以工作,但对我来说最容易解决的是半透明属性。基本上,如果它的半透明 ios 允许它背后的东西。您只需将其启动到低 70 像素左右即可覆盖导航栏。
【参考方案1】:
大小、状态栏、方向、顶栏、底栏仅在属性检查器 中模拟,例如你看到的,不是你得到的,它只是模拟......
要制作状态栏/底栏/方向等。你必须通过代码或 .xib 属性检查器/大小检查器来完成。
状态栏可以看this。
希望对你有所帮助。
【讨论】:
【参考方案2】:将以下代码添加到视图控制器中的 viewDidLoad:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
self.edgesForExtendedLayout = UIRectEdgeNone;
【讨论】:
【参考方案3】:您可以通过在 iOS7 SDK 中实现一个名为 edgesForExtendedLayout 的新属性来实现这一点。请添加以下代码来实现这一点,
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
您需要在您的 -(void)viewDidLoad 方法中添加上述内容。
iOS 7 对您布局和自定义 UI 外观的方式进行了多项更改。视图控制器布局、色调颜色和字体的更改会影响应用程序中的所有 UIKit 对象。此外,手势识别器 API 的增强功能让您可以更精细地控制手势交互。
使用视图控制器
在 iOS 7 中,视图控制器使用全屏布局。同时,iOS 7 让您可以更精细地控制视图控制器布局其视图的方式。特别是,全屏布局的概念得到了改进,让视图控制器可以指定其视图每个边缘的布局。
WantsFullScreenLayout 视图控制器属性在 iOS 7 中已弃用。如果您当前指定 wantsFullScreenLayout = NO
,则视图控制器在 iOS 7 中运行时可能会在意外的屏幕位置显示其内容。
为了调整视图控制器的视图布局方式,UIViewController 提供了以下属性:
edgesForExtendedLayout
edgesForExtendedLayout 属性使用 UIRectEdge 类型,除了指定 none 和 all 之外,它还指定矩形的四个边中的每一个。使用 edgesForExtendedLayout 来指定视图的哪些边缘应该被扩展,而不管条形半透明。默认情况下,该属性的值为 UIRectEdgeAll。
extendedLayoutIncludesOpaqueBars
如果您的设计使用不透明条,请通过同时将 extendedLayoutIncludesOpaqueBars
属性设置为 NO 来优化 edgeForExtendedLayout。 (extendedLayoutIncludesOpaqueBars
的默认值为NO。)
自动调整ScrollViewInsets
如果您不希望自动调整滚动视图的内容插入,请将 automaticallyAdjustsScrollViewInsets
设置为 NO。 (automaticallyAdjustsScrollViewInsets
的默认值为 YES。)
topLayoutGuide、bottomLayoutGuide
topLayoutGuide
和 bottomLayoutGuide
属性指示视图控制器视图中顶部或底部条边的位置。如果 bar 应该与视图的顶部或底部重叠,您可以使用 Interface Builder 通过在 topLayoutGuide 的底部或 bottomLayoutGuide
的顶部创建约束来相对于 bar 定位视图。 (如果没有 bar 与视图重叠,topLayoutGuide 的底部与视图的顶部相同,bottomLayoutGuide 的顶部与视图的底部相同。)这两个属性都是在请求时延迟创建的。
【讨论】:
以上是关于为啥 Ios 会忽略它下面的顶部栏和布局项?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 LayoutInflater 会忽略我指定的 layout_width 和 layout_height 布局参数?
为啥 LayoutInflater 会忽略我指定的 layout_width 和 layout_height 布局参数?