使用 AutoLayout 的最佳实践是啥?

Posted

技术标签:

【中文标题】使用 AutoLayout 的最佳实践是啥?【英文标题】:What is best Practices to use AutoLayout?使用 AutoLayout 的最佳实践是什么? 【发布时间】:2014-02-06 11:20:22 【问题描述】:

ios7开始,我一直在寻找标准的GUI设计模式。

在我之前的两个应用程序中,我取消选中了自动布局并使用了自动调整大小。

通常是这样的

主视图在 SIZE INSPECTOR 中如下所示。

目前我正在制作两个 xib, iPhone4 iphone 5 并在 iOS6/7 Delta 中使用 UIViewAutoresizingFlexibleTopMargin 和 UIViewAutoresizingFlexibleLeftMargin 以及 -64。

对于内部/子视图,我通常在 iOS6/7 Delta 中保留 UIViewAutoresizingFlexibleTopMargin 和 UIViewAutoresizingFlexibleLeftMargin 和 -64 以在 iOS6 中正常工作。

它给出了几乎完美的结果,但有时我需要从 xib (0,0) 的开头开始 View,但有时从 (64,0) 开始,以显示 View 在运行时看起来像是从 View 的最上边界开始。

理解什么是设计 XIB 的标准方法让我很困惑,这样我们就可以在 iPhone4 和 iPhone5 以及这两个平台上使用单个 XIB。

谢谢

【问题讨论】:

为什么要为 3,5" 和 4" 设备制作 NIB,您可以使用 Autosizing 掩码来弥补不同的高度。我从来没有使用过用于 3.5" 和 4" 设备的 NIB。 @rckoenes,iPhone 5 的高度比 iPhone4 大。所以如果一个视图大于 480 像素,你将如何在 3.5 英寸(iPhone5)内调整它? 将自动调整大小的遮罩设置为灵活的高度,没有灵活的顶部或底部。 你能给我看一下 Autosizing 的图片吗,你是如何放置主视图和子视图的? Screenshot 这是我设置所有根视图以确保它们增长或缩小的方式。我什至在 iPad 上使用相同的 NIB。 【参考方案1】:

就我个人而言,我发现使用带有 AutoLayout 的 Interface Builder 对用户不是很友好,而且很快就变得一团糟。

我更喜欢以编程方式完成所有 AutoLayout 的工作。为了避免大量样板,我使用了Masonry library,这非常棒。

【讨论】:

【参考方案2】:

从头开始编写 Auto Layout 代码并不容易。AutoLayout 有类似的选项可用。我们可以在 PureLayout 的帮助下以编程方式设置所有约束。 https://github.com/PureLayout/PureLayout

安装:

    将 pod PureLayout 添加到您的 Podfile。

    pod 'PureLayout'
    

    从终端运行 pod install,然后打开应用的 .xcworkspace 文件以启动 Xcode。

    导入PureLayout.h 伞头。

      在你的 Podfile 中有use_frameworks!

      斯威夫特: import PureLayout

      Objective-C: #import <PureLayout/PureLayout.h>(或启用模块:@import PureLayout;

      在你的 Podfile 中没有 use_frameworks!

      Swift:#import "PureLayout.h" 添加到您的桥接头。

      Objective-C: #import "PureLayout.h"

你已经完成了!现在用PureLayout做一些漂亮的设计

【讨论】:

【参考方案3】:

使用自动布局的最佳实践是大量练习,直到熟练使用它为止:-(

然后您可以使用多种策略。

尝试在代码中结合界面构建器和约束是行不通的,并且会让您大吃一惊。不要那样做。

在你弄清楚事情之后的第二个工作是在界面构建器中使用布局约束进行设计和布局。请注意,布局约束可以是 IBOutlets,您可以很容易地在代码中操作布局约束的常量。

第三个同样有效的方法是在代码中创建视图,包括布局约束。使用或编写一个使创建约束更容易的库。

【讨论】:

【参考方案4】:

正如苹果开发者官网所述,以下链接公开了使用Visual Format Language进行自动布局的指南,这是当今iOS开发者采用的最佳实践。

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/VisualFormatLanguage.html

【讨论】:

请尽量包含链接文章的内容摘要,而不仅仅是提供链接。我刚刚更新了您的链接,因为它已损坏(请参阅编辑历史记录);但我目前没有时间自己添加摘要。

以上是关于使用 AutoLayout 的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章

MVC 验证 - 使用服务层保持 DRY - 最佳实践是啥?

DAO(数据访问对象)最佳实践 - 我看到的示例同时使用 DAO 和服务对象,这里的最佳实践是啥?

RxSwift:使用 DisposeBag 的最佳实践是啥?

使用程序集属性的最佳实践是啥?

Firestore 数据结构的最佳实践是啥?

使用 jQuery 解析远程内容的最佳实践是啥?