为啥 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

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

【讨论】:

以上是关于为啥 Ios 会忽略它下面的顶部栏和布局项?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 LayoutInflater 会忽略我指定的 layout_width 和 layout_height 布局参数?

为啥 LayoutInflater 会忽略我指定的 layout_width 和 layout_height 布局参数?

为啥 Pip 会忽略已配置的具有嵌套依赖项的存储库?

iOS SwiftUI:ScrollView 忽略顶部安全区域

Flexbox 防止边距被尊重

有一个图例会导致 IE 忽略字段集的顶部填充 - 替代方案?