Interface Builder:UIView的iOS 6/7 Deltas布局是什么?

Fre*_*Lee 111 layout uiview ios xcode5

我刚刚注意到在UIView的结构布局下找到的iOS 6/7 Delta属性.

这是什么以及为什么AutoLayout缺少这个?

在此输入图像描述

WDU*_*DUK 108

注意:我刚才注意到这个问题,但我现在只发布我的答案,因为NDA已被解除

为什么AutoLayout没有显示?

您可能已经注意到,iOS 7带来了全新的面貌.UI元素的外观已经改变,但也有一些大小(或一般的度量).这可以使界面设计适应iOS 7及其前辈的一些痛苦.

Apple的官方路线是使用AutoLayout解决这个问题; 这应该会为您布置UI元素带来很多麻烦.有时合并这一点并不容易,特别是如果您出于商业原因仍然支持iOS 5,或者您的界面管理方式使得实施AutoLayout变得困难.因此,如果你属于这个小众类别,Apple似乎提供了一种让你的工作更轻松的方法,并且他们称这个iOS 6/7 Deltas.

那好吧,它做了什么?

虽然Interface Builder中的标签对于"Delta"在此上下文中的含义有点不清楚,但.xib文件中包含的与此功能对应的代码更加清晰:

<inset key="insetFor6xAndEarlier" minX="-50" minY="-100" maxX="-50" maxY="300"/>

键名insetFor6xAndEarlier明确说明了这一点; 在iOS 7的前身上运行时,您可以为UI元素提供替代插入.例如,上面定义了以下delta变化:

x: 50
y: 100
width: -100
height: 200
Run Code Online (Sandbox Code Playgroud)

虽然存储在.xib中的值与引用的值不直接对应,但它们之间存在相关性.

x: -minX
y: -minY
width: minX + maxX
height: minY + maxY
Run Code Online (Sandbox Code Playgroud)

下面的图像直观地显示了这种变化.这是一个非常极端的例子,但它是为了展示它的能力.我只希望在实践中只有几个像素的增量变化.

iOS7查看

iOS6查看

您可能会注意到iOS 6视图的值是反向的; 这是因为增量与您正在使用的视图类型有关.如果您正在为iOS 6进行编辑,那么为了正确地为iOS 7转换元素(与上面的示例相反),可以使用增量.

为了查看不同的样式,您可以根据运行的操作系统更改Interface Builder的显示方式.它包含在文件检查器 - >界面生成器文档(右侧栏中的第一个选项卡)中,如下所示:

界面风格开关

如果我喜欢手动编写界面,这是否存在?

不是直接的,但通过对代码中的OS版本进行条件检查,并相应地设置正确的位置/大小,您可以轻松实现相同的效果.接口生成器中存在增量功能,因为没有代码可以直接进行条件定位,并且Interface Builder的目的是尽可能多地为UI获取代码.

总体...

Apple强烈建议您使用AutoLayout,它在大多数情况下让您的生活更轻松.如果您不能使用它(出于上述原因),增量可以根据当前操作系统的指标灵活地定位UI元素,而无需在代码中手动重新定位它们.一个很好的例子是调整缺少状态栏,但还有很多其他用例.

当然,如果你只是为iOS7及以上版本开发,你不需要知道这个功能/不会发现它.只有当您使用iOS7 SDK构建运行应用程序的iOS6设备时,如果没有自动布局,您是否需要增量.

在撰写本文时(8月21日),我找不到任何有关此功能的文档,也没有找到WWDC材料中的任何文档.我有一个游戏,经过一些研究,这就是我发现的.

  • 非常感谢WDUK (2认同)

dig*_*rok 83

这实际上指的是从iOS6到iOS7的布局位置之间的Delta.

在iOS7中,某些视图可以隐藏状态栏或使其透明,实际上它覆盖在视图的顶部.因此,如果您在iOS6上放置一个UI元素(0.0,0.0),它将显示在状态栏下方,但在iOS7上,它会显示在状态栏下方.因此,在这种情况下,您需要一个与状态栏高度(20.0点)匹配的增量,以便在iOS6和iOS7中布局看起来相同.

我相信如果你使用自动布局不需要这个,但当然,你失去了iPad1的支持,我们很多人都不愿意在这个时候让步.

  • 对我来说,我发现它是从iOS 7到iOS 6的delta.我将我的元素降低了20分,然后为Delta Y设置了-20. (27认同)

Sar*_*ran 30

我知道这已经得到了回答,只是添加了一个小变体,希望它也可以帮助那些不使用自动布局但仍想支持iOS 6.1及更早版本的人.

阅读Apple的过渡指南 - 支持早期版本

选择'查看为'到'iOS 7.0及更高版本'

在此输入图像描述

iOS 7的基本UI.对于iOS 6,给出合适的delta值.使用预览查看它将如何在iOS 7和iOS 6设备中呈现.

在此输入图像描述

快速步骤:

单独选择根视图的每个直接子项,并将其20px添加到其"Y"值.

在此输入图像描述

然后,集体选择所有直接孩子,并将delta Y指定为-20px.您也可以批量或单独执行此操作.

在此输入图像描述


sun*_*ppy 9

AutoLayout至少需要iOS 6.0.如果您想支持iOS 5.0,则无法使用AutoLayout.

这些增量用于帮助您调整不同iOS版本(主要是iOS 7和iOS版本低于7)的视图位置.

我使用这些值来帮助我喜欢这张照片. 在此输入图像描述