使用故事板的优点和缺点

Posted

技术标签:

【中文标题】使用故事板的优点和缺点【英文标题】:Pros and cons of using storyboards 【发布时间】:2012-06-07 23:34:27 【问题描述】:

我计划学习使用故事板开发应用程序。任何人都可以在使用 StoryBoards 时发布一些优点和缺点吗?

【问题讨论】:

我想问的是,是否真的有必要使用故事板,或者使用它有什么缺点.. 【参考方案1】:

When to use Storyboard and when to use XIBs

What are the benefits of using Storyboards instead of xib files in ios programming?

iphone-sdk-development

我认为这些链接很有帮助,并且与您的问题相关。就个人而言,我认为故事板比 nib 更好,因为它们无需编写视图之间的转换(除非您使用 CA 的自定义转换),并且它们也具有 nib 文件的所有功能。

希望这会有所帮助。

-----------编辑-----------

这里是我找到的更多链接:

这篇文章讲述了使用故事板的一些缺点。

UIStoryboard on iOS 5: The Good, The Bad, and the 'This Plain Sucks'

这个主要是关于好处的。 What are the advantages of iOS 5.0 storyboarding over traditional UI layout?

【讨论】:

【参考方案2】:

这主要是缺点。不要使用情节提要。这是他们的问题列表,复制自iraycd:

Storyboards 在运行时失败,而不是在编译时失败:您的 segue 名称有错字或在您的 storyboard 中连接错误?它会在运行时爆炸。您使用了故事板中不再存在的自定义 UIViewController 子类?它会在运行时爆炸。如果您在代码中执行此类操作,您将在编译时及早发现它们。 更新:我的新工具StoryboardLint主要解决了这个问题。

故事板很快就会变得混乱:随着项目的增长,您的故事板变得越来越难以导航。此外,如果多个视图控制器对多个其他视图控制器有多个 segue,您的故事板很快就会开始看起来像一碗意大利面,您会发现自己放大和缩小并到处滚动以找到您正在寻找的视图控制器并找出 segue 指向的位置。 更新:如this article by Pilky 和this article by Robert Brown 中所述,此问题主要可以通过将您的故事板拆分为多个故事板来解决。

故事板使团队工作更加困难:因为您的项目通常只有一个巨大的故事板文件,所以让多个开发人员定期更改该文件可能会让人头疼:更改需要合并并解决冲突。当发生冲突时,很难说如何解决它:Xcode 会生成故事板 XML 文件,但它的设计并不是真正考虑到人类必须阅读的目标,更不用说编辑它了。

故事板使代码审查变得困难或几乎不可能:同行代码审查对您的团队来说是一件很棒的事情。但是,当您对情节提要进行更改时,几乎不可能与其他开发人员一起查看这些更改。你所能得到的只是一个巨大的 XML 文件的差异。破译真正改变了什么以及这些改变是正确的还是破坏了某些东西真的很难。

Storyboards 阻碍代码重用:在我的 iOS 项目中,我通常会创建一个类,其中包含我在整个应用程序中使用的所有颜色、字体、边距和插图,以使其保持一致外观和感觉:如果我必须为整个应用程序调整这些值中的任何一个,这是一个单行更改。如果您在情节提要中设置此类值,则会复制它们,并且在您想要更改它们时需要找到每一个出现的地方。您错过一个的机会很高,因为情节提要中没有搜索和替换。

Storyboards 让你每件事都做两次:你是否正在构建一个在 iPad 和 iPhone 上运行的通用应用程序?当您使用故事板时,通常会有一个用于 iPad 版本的故事板和一个用于 iPhone 版本的故事板。保持两者同步需要您在两个地方进行每个 UI 或应用程序工作流更改。耶。 更新:在 iOS 8 和 Xcode 6 中,您可以为 iPhone 和 iPad 使用一个 Storyboard。

故事板需要不断的上下文切换:我发现自己在代码中的工作和导航速度比在故事板中快得多。当您的应用程序使用故事板时,您会不断切换上下文:“哦,我想点击这个表格视图单元以加载不同的视图控制器。我现在必须打开故事板,找到正确的视图控制器,创建一个新的 segue到另一个视图控制器(我也必须找到),给 segue 一个名字,记住这个名字(我不能在故事板中使用常量或变量),切换回代码,希望我不要打错名字我的 prepareForSegue 方法的那个 segue。我多么希望我可以在我所在的地方输入这 3 行代码!不,这不好玩。在代码和情节提要之间(以及键盘和鼠标之间)切换会很快过时并减慢您的速度。

故事板很难重构:重构代码时,您必须确保它仍然符合故事板的预期。当您在情节提要中移动内容时,您只会在运行时发现它是否仍然适用于您的代码。我觉得好像我必须让两个世界保持同步。我的拙见感觉很脆弱,不鼓励改变。

故事板不可搜索:当您使用故事板时,Xcode 中的项目范围搜索并不是真正的项目范围搜索。它们不包括在搜索中。因此,当您从代码中删除自定义类或重命名它时,您将不得不手动浏览情节提要或查看其原始 XML 以确保它与您的代码更改一致。不,先生,我不喜欢它。 更新:故事板可在 Xcode 6 中搜索。

故事板不太灵活:在代码中,您基本上可以做任何您想做的事情!使用情节提要,您仅限于在代码中可以做的事情的一个子集。尤其是当你想用动画和过渡做一些高级的事情时,你会发现自己“与故事板作斗争”才能让它发挥作用。

Storyboards 不允许您更改特殊视图控制器的类型:您想将UITableViewController 更改为UICollectionViewController?还是变成普通的UIViewController?在情节提要中不可能。您必须删除旧视图控制器并创建一个新视图控制器并重新连接所有 segue。在代码中进行这样的更改要容易得多。

Storyboards 为您的项目增加了两个额外的责任:(1) Storyboard Editor 工具,用于生成 Storyboard XML,以及 (2) 解析 XML 并创建 UI 和控制器的运行时组件从它的对象。这两个部分都可能存在您无法修复的错误。

故事板不允许您将子视图添加到 UIImageView:谁知道为什么。

Storyboards 不允许您为单个 View(-Controller)s 启用自动布局:通过选中/取消选中 Storyboard 中的 Auto Layout 选项,更改将应用​​于所有故事板中的控制器。 (感谢 Sava Mazăre 的这一点!)

Storyboard 破坏向后兼容性的风险较高:Xcode 有时会更改 Storyboard 文件格式,并且不保证您可以打开自己创建的 Storyboard 文件几年甚至几个月后的今天。 (感谢thoughtadvances。See the original comment)

这是麦当劳:用史蒂夫乔布斯的话来说微软:It's McDonald's (video)!

【讨论】:

以上是关于使用故事板的优点和缺点的主要内容,如果未能解决你的问题,请参考以下文章

你如何摆脱swift中主要故事板的代码?

如何重命名故事板并保留来自其他故事板的链接

带有故事板的 UISplitViewController

Silverlight:重复故事板的一部分

带有故事板的 NSArray

如何在 iOS 中使用没有故事板的 MvvmCross?