更新为 iPhone 5 制作的 XIB 以与 iPhone 6 和 iPhone 6 Plus 一起使用

Posted

技术标签:

【中文标题】更新为 iPhone 5 制作的 XIB 以与 iPhone 6 和 iPhone 6 Plus 一起使用【英文标题】:Updating an XIB made for iPhone5 to work with iPhone6 and iPhone6 Plus 【发布时间】:2015-01-18 03:37:08 【问题描述】:

我在我的应用中创建了几个没有自动布局和大小类的 xib。

当我在实际设备上运行应用程序时,它在 iPhone6 上运行良好,但在 iPhone6 Plus 上,视图紧贴屏幕的一侧。

所有 xib 上的元素都设置为使用自动调整大小:

添加有关如何构建我的 xib 的信息:自动调整大小已设置为如下所示,以便当在 ios

问题是无论我如何尝试,包括自动布局和 xib 的大小类都会搞砸一切。是否有任何简单的方法可以将我的视图转换为使用自动布局,以便可以更改相同的视图(专为 iPhone5 分辨率 | iPhone 4 英寸),以便它们在 iPhone6 Plus 分辨率上看起来相同?如果自动调整大小保持其设置方式,那就太好了。

我已尝试使用多种技术和建议的约束条件,但图像有时只会增加高度(不保持纵横比),背景图像会粘在屏幕的一侧,并且标签的大小不会增加。 iPhone6 和 6 Plus 分辨率的资源也已添加到项目中。

【问题讨论】:

我曾经使用建议的约束功能,但大多数时候它们并没有给你想要的东西。通常使用自动布局,您必须决定是否希望视图居中,或者您希望视图与其父视图或相邻视图的距离。许多教程都描述了这一点,但总的来说,从spring/structs 到自动布局不会有真正的捷径。学习是值得的! 还有很多动画我必须处理,因为 iPhone4 和 iPhone5 都使用相同的宽度:至少在 xib 构建器上为 320,我可以使用点对点动画。现在这些动画不能在新的 iPhone6 和 iPhone6 plus 上正常工作。既然你已经研究过它知道如何制作通用动画吗? (无论如何我所做的对于 iPhone 3.5 英寸和 iPhone4 英寸来说都是通用的)@NateLee 我来自一个强大的弹簧和支柱方法,发现自动布局很难掌握。基本上约束的行为与弹簧和支柱相同,它们现在只是分配了属性,并且可以应用运行时逻辑。另一个提示是,您可以让两个约束做同样的事情,其中​​一个具有更高的优先级。关于 iPhone 6 和 6 plus。尝试从对齐“容器中的水平中心”开始,并至少设置宽度,使其成为低优先级。然后根据需要固定在边缘。如果我能提供更多帮助,请告诉我 其实,自动布局的动画很有意思!而不是动画帧本身(我不再接触大部分帧)我有IBOutlets引用NSLayoutConstraints(那些蓝色/橙色约束线)。 ***.com/questions/19899323/… 是一个很好的大纲/提示你应该做什么。 TL;DR 您在storyboard 中将IBOutlets 引用到constraints,重置constraint's 常量值(ex. viewHeightConstraint.constant = 100),最后,将您的观点告诉"layout if needed"(例如.self.view.layoutIfNeeded()). 【参考方案1】:

这是我在需要处理相同问题时发现的:

1) 如果您不想使用自动布局,可以使用缩放模式。 Apple 在 iOS8 上添加了这个聪明的小技巧,让 iPhone 5 的所有以前的应用程序在 iPhone 6 上无需任何修改即可运行。要使用它,您不得在您的项目中设置具有 iPhone 6 分辨率的启动图像属性(但您需要为 iPhone 5 设置一个图像,以便它知道您支持 iPhone 5 并且您必须将 Launch Screen File 留空)。这样做,iOS 将在 iPhone 6/6+ 上运行您的应用程序时使用缩放模式,并且您的所有视图都将正确缩放以与其屏幕完美配合。这是可能的,因为新屏幕保持与 iPhone 5 屏幕的纵横比,所以 iOS 基本上只需要将您的 pos/size 乘以正确的屏幕尺寸比例。 不过,如果你将 iPhone 6 特定分辨率的图像设置为某些 XIB,我不确定这是否仍然有效。

此解决方案基本上意味着您选择忽略 iPhone 6 的存在并继续为旧设备编程。

2) 如果您真的想放弃自动缩放模式并为 iPhone 6 制作更新的应用程序(Apple 希望您这样做),您可以执行以下任何一项:

使用自动布局。这是Apple希望每个人都使用的标准,虽然一开始有点难以驯服,但你会真正爱上它。不过,我现在已经放弃使用 Autolayout,因为我在尝试在 iOS6 和 7 上运行我的应用程序时发现了一些问题,我现在不能不支持(你可以阅读更多关于它的信息here)。

使用两个 XIB,一个用于 iPhone 4/4s/iPod Touch 4,一个用于 iPhone 5/5s/6/6+。请注意,我建议您为 Apple 设计的每个设备纵横比保留一个 XIB。由于将使用给定 XIB 的设备的纵横比相同,因此您可以使用自动调整大小的蒙版来随意放大您的视图。一切都会保持正确的纵横比。

我现在使用第一个建议(缩放模式),而我在 iOS6 和 7 上运行的自动布局问题没有得到解决。

【讨论】:

这对我有用。我有一个客户的旧应用程序,他想要一些修改。在不添加 LaunchFile 的情况下,Xibs 在 iPhone6/6+ 上可以正常缩放,但在添加 LaunchFile 后,布局被修改。删除 LaunchFile 就成功了!谢谢你:)【参考方案2】:

我认为您使用自动调整大小蒙版的方式是正确的。也许其中的一些调整可以解决您的问题。

您附加的图片是对象的自动调整大小属性,并稍微预览了此设置的行为方式。

像你一样设置自动调整大小的蒙版,将固定你的对象相对于它的超级视图的距离,但由于你没有设置宽度灵活(框内未选择的箭头),系统将不得不在定位你的对象之间进行选择容器的左侧或右侧来解决冲突,并且您的对象可能位于左侧(默认行为......您可以在自动调整大小的蒙版预览小窗口中确认这一点)。

尝试将宽度设置为灵活,并确保超级视图的设置也配置为可缩放(灵活的宽度和灵活的高度)。

我从 iOS4 开始开发一个项目,支持 iPhone 和 iPad,每个屏幕只使用一个 xib,只需使用 autoresize 蒙版属性设置视图缩放行为,所以我很确定你也可以做到。

如果您的布局相同,请不要使用 2 个 xib。在大多数情况下,这是一个非常糟糕的做法,您稍后会强调尝试更新布局、添加按钮或其他任何地方......

【讨论】:

以上是关于更新为 iPhone 5 制作的 XIB 以与 iPhone 6 和 iPhone 6 Plus 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

创建两个xib,一个用于iPhone,一个用于iPad

为 iPhone 5 加载不同的 xib

为 iOS 4 App 添加 iPhone 5 xib

为 iPhone 5 加载不同的 xib 失败

iPhone:如何制作透明的 XIB,从中我们可以看到以前视图的 uitableview

我们是不是需要为所有 iPhone/iPad 设备提供单独的故事板?