iOS 6/7 deltas 使后台容器消失

Posted

技术标签:

【中文标题】iOS 6/7 deltas 使后台容器消失【英文标题】:iOS 6/7 deltas make background container disappear 【发布时间】:2013-11-20 13:53:11 【问题描述】:

我目前正在开发一个遗留应用程序,该应用程序最初是在 ios 6 发布之前开发的,更不用说 iOS 7。我的部分工作是让它在 iOS 7 和旧版本上看起来都可以接受。这就是我的应用在 iOS 7 中的外观,这几乎就是它应该的外观:

首先:我的根元素是一个正常的视图,它像往常一样填满屏幕。里面依次是包含图像的 ScrollView 和两个紫色条,它们是带有标签的视图。

我为使其在 iOS 6 及以下版本上运行所做的工作是这样的:

我在最上面的紫色条形上添加了一个 -20 的高度增量。 我向 ScrollView 和底部紫色条添加了 -20 Y 增量,当然还有顶部条中的标签。

然而,事情是这样的:

现在,首先,不同的语言与问题无关,这只是我的物理测试设备的设置方式。故事板的设置相同。

我从中得出的结论是,元素被定位在它们需要的位置,因为它们的子元素都显示在正确的位置,但视图的背景颜色似乎变得透明。

一些有用的知识:

如果我没有在上面提到我设置了一个高度、宽度、X 或 Y 增量,那么它被设置为 0。 所有定位都存储在情节提要中。 ScrollView 的 X、Y、宽度和高度分别为 0、40、320、420。顶栏位于 0、0、320、40,底视图位于 0、460、320、20。 您在侧面看到的按钮和底部的徽标是以编程方式放入的。它们的父视图是主视图,因此它们与 ScrollView 和两个栏处于同一层次结构。 即使我以编程方式将背景颜色设置为红色(例如),它在 iOS 6 中仍然不可见。在 iOS 7 中它变成红色就好了,所以我使用的代码很好。

有人知道是什么原因导致我的背景消失了吗?

【问题讨论】:

窗口坐标中的标签栏框架是什么?当你为栏视图设置 UIView.layer.borderWidth 和 borderColor 时会发生什么,你能看到屏幕上的边框吗?当您转储然后视图显示在屏幕上时,条形的 backgroundColor 值是多少? 是的,正如 yurish 所说,如果您在 iOS6 上运行时可以输出顶栏和底栏的帧,将会有所帮助 感谢您的回复。添加边框明显没有任何改变。颜色似乎也设置正确,打印为UIDeviceRGBColorSpace 0.215686 0 0 0.439216 1。让我吃惊的是高度的值。 X、Y 和宽度都很好,但两者的高度都是 0。我 100% 确定在我的代码中没有其他任何东西在这些栏中设置任何内容,所以我一定在情节提要上做错了。将 -20 的高度增量添加到顶部栏,将 -20 的 Y 增量添加到底部栏,我错了吗? 您可以尝试删除增量。真的说我不知道​​你为什么要添加它取决于你的项目的增量。在 iOS 7 中,工具栏可能会粘在状态栏边缘并跨越状态栏下方的背景。他们有正常的高度。但是你使用常规的 UIView。是放在状态栏下面吗?它是否适应某些协议? 我需要增量,因为否则标题栏太大(状态栏下方 20 像素的空紫色)并且底部栏根本不可见,因为它是 20 像素高,因此移出看法。为了解决我的问题,我现在只是在代码中添加了一行,将两个视图的高度更改为相关的任何内容,这目前工作正常。如果有更好的解决方案,我很乐意听到。 【参考方案1】:

尝试将其添加到 viewDidLoad

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])  // if iOS 7
        self.edgesForExtendedLayout = UIRectEdgeNone; 
    

【讨论】:

我试过了,但它并没有解决我遇到的 iOS 6 问题,同时打破了 iOS 7 布局(之前工作正常)。看着代码我并不感到惊讶,但我想我还是会尝试一下。感谢您尝试提供帮助。

以上是关于iOS 6/7 deltas 使后台容器消失的主要内容,如果未能解决你的问题,请参考以下文章

iOS 6/7 Deltas:仅适用于子视图?

Interface Builder:UIView 的 Layout iOS 6/7 Delta 有啥用?

使计时器在后台 iOS 上运行 3 分钟以上

如何保证 docker 后台进程重启,而不引起容器关闭

如何保证 docker 后台进程重启,而不引起容器关闭

如何保证 docker 后台进程重启,而不引起容器关闭