利用iOS 6新的自动布局功能,同时在iOS早期版本上提供与旧设备的兼容性的最佳方式是什么?

推荐答案

可以在每个.Storyboard或.xib文件上启用或禁用自动布局.只需 Select 特定文件并使用Xcode中的文件判断器修改"use Autolayout"属性:

文件判断器中的自动布局属性

在部署目标设置为6.0之前的iOS版本的情况下,使用启用自动布局的接口文件会导致编译错误,例如:

主板出错.情节提要:3:在6.0之前的iOS版本上自动布局

要在项目中使用自动布局并保持与iOS4-5的兼容性,您可以 Select 创建两个targets:一个用于部署目标IOS 6.0,另一个用于较早的IOS版本,例如:

在此处输入图像描述

您还可以 for each 故事板和XIB文件创建两个版本,并使用6.0目标启用的自动布局和传统目标启用的自动布局,例如:

在此处输入图像描述

然后将MainStoryBoardAutoSize添加到iOS6目标的构建阶段,并将另一个文件添加到iOS4目标.您可以了解有关使用多个目标here的更多信息.

编辑:正如marchinram's answer所指出的,如果您从代码加载情节提要文件,并且不使用Xcode中的"主情节提要"设置来设置初始情节提要,则可以使用单个目标.

对我来说,维护多个目标和接口文件所增加的复杂性所带来的成本似乎超过了使用autolayout的好处.除了少数特殊情况外,如果需要iOS4-5兼容性,最好只使用普通的自动调整大小(或代码中的LayoutSubview).

Ios相关问答推荐

OSLog(Logger)通过简单的字符串插值给出错误

SWIFT中具有可选返回类型和泛型的网络请求

SWIFT设备方向更新不正确

如何在SwiftUI中拥有基于操作系统版本的条件修饰符?

JSON响应中的键有时为Int,有时为字符串

在flutter中使用flatter_screenutil这样的软件包的目的是什么?

objc[25442]:Swift类的扩展和类别不允许有+load方法

如何使用 SwiftData 从列表中删除子项目?

flutter中实现自定义底部导航栏

Flutter动画放大图

CGPath intersection(_:using:) 和朋友(iOS 16 中的新功能)坏了?

帧过渡动画有条件地工作

SwiftUI DatePicker 格式在每个设备上都不一样,如何让它总是显示相同的 Select 版本?

Xcode - 错误 ITMS-90635 - Bundle 包中的 Mach-O 无效 - 提交到 App Store

在 iOS 中获取设备位置(仅限国家/地区)

SwiftUI 视图 - viewDidLoad()?

无法将NSTaggedPointerString类型的值转换为NSNumber

在 React Native 中保存敏感数据

检测应用程序何时进入我的视图背景的最佳方法是什么?

如何删除UITableView中最后一个单元格的最后一个边框?