【问题标题】:Adding Views. Storyboard VS. Programmatically [closed]添加视图。故事板VS。以编程方式[关闭]
【发布时间】:2016-04-14 18:32:30
【问题描述】:

我已经和这个斗争了很长时间。 假设我有一个 UIViewController 并且需要在该控制器中放置一个带有 UIImage 的 UIImageView 。 所以我有两种方法:

1.) 通过故事板

2.) UIImageView *imageView = [UIImageView new]; imageView.frame = CGRectMake(bla, bla, bla); [self.view addSubview: imageView];

此外,我还需要支持不同的屏幕尺寸(从 iPhone 4 到 iPhone6+),并且带有约束的自动布局对我来说并不完全清楚。而且我在 sh*tcoding 之类的

int wrapperHeight = (screen.height == 480) ? 100 : 200

我觉得我做错了什么。 当我开始学习objective-c时,我看过一些开源项目,根本没有storyboard,所以我认为以编程方式添加视图是一个很好的做法。

你能解释一下“正确的方法”吗?

【问题讨论】:

  • 使用带有自动布局和大小类的情节提要

标签: ios objective-c iphone storyboard xib


【解决方案1】:

我会说大多数时候带有自动布局的情节提要是最佳选择。它有很多优点:

  • 它将表示与逻辑分开。在控制器中创建整个界面通常是一个糟糕的设计。对于简单的接口,以命令式的方式声明它们会带来很多开销。很多时候,您最终会获得数百行界面代码,而这些代码可以在 10 分钟内毫不费力地在故事板或 xib 中完成。

  • 使用故事板,您将拥有一个出色的所见即所得编辑器,您可以在其中查看屏幕在不同设备上的外观,而无需重新构建项目并在数十个设备或模拟器上运行它。 嗯,不是几十种而是 4 种不同的 iPhone 分辨率 + 2 种 iPad 的分辨率仍然很多。此外,视网膜屏幕和非视网膜屏幕之间的文本大小和渲染可能存在微小差异

  • Autolayout. 当然,您也可以在代码中使用它,但苹果的默认界面很糟糕。有一些 3rd 方库可以让使用自动布局变得更容易一些,但无论如何使用情节提要,您在大约 80% 的时间里根本不用担心代码中的自动布局。剩下的 20% 就像向控制器添加约束出口,然后通过一行代码更改它的常量或优先级

  • 大小类。同样,您可以在代码中使用它们,但对于情节提要,您可能不必这样做。尺寸类别允许您为所有可能的设备外形、不同的设备方向等提供一个单一界面。在尺寸类别之前,开发人员必须为 iPhone 和 iPad 提供 2 组不同的界面。

但是,在某些地方,故事板并不是实现目标的最佳方式。例如,如果您有一些在应用程序的不同位置使用的视图。使用仅故事板的方法,您必须在许多地方拥有此视图的副本,因此在其中一个进行更改时 - 您必须记住在其他副本中也进行此更改。在这种情况下,最好使用具有此类视图的单独 xib 文件,然后在情节提要中使用它。

此外,自动布局在性能方面可能非常昂贵。因此,如果您的应用程序开始滞后并且您确定(使用分析器)自动布局例程是滞后的原因 - 那么在代码中手动处理某些视图的创建和布局可能是有意义的。但这可能仅适用于非常复杂的接口。大多数时候性能不会成为问题。

您说您不清楚自动布局。这不是拒绝使用它的原因。您必须做更多的工作才能使应用程序在没有自动布局的所有设备上看起来都比使用它的设备好。您看到的“一些开源项目”可能是为第一代 iPhone(4s 及之前)编写的,它们都具有相同的点分辨率,并且所有尺寸和位置都可以硬编码。现在,正如我之前所说,我们有近十几种不同的解决方案。在代码中手动处理这一切是一场真正的斗争。自动布局会让你的生活更轻松:)

您还可以看看这些关于何时何地使用故事板、xib 和手动视图处理的辩论:http://www.raywenderlich.com/51992/storyboards-vs-nibs-vs-code-the-great-debate

您还可以在同一站点 (http://www.raywenderlich.com) 上查找自动布局教程以更好地理解它。

【讨论】:

  • 非常感谢您的回答!
  • Storyboard 有时会阻碍应用架构,因此它是 Storyboard 的一大缺点。
【解决方案2】:

这两种方式都有其自身的优势,作为一名程序员,你应该对这两种方式都感到满意,使用哪一种取决于你的情况,有时它易于使用 storyboard/xib,有时它易于以编程方式构建视图

以编程方式创建视图的一些优点 -

  1. 更好地与团队合作。提交到存储库时,合并代码和解决冲突比使用情节提要更容易。

  2. 在调试时更容易跟踪错误,而且您不必查看 IB。

  3. 以编程方式创建视图为您提供更多控制权

在故事板中添加视图的一些优点 -

  1. 在 storyBoard 中开发视图更快,它可以帮助您将所有内容放在一起,例如居中视图、对齐它们、连接它们的动作等。

  2. 您的代码不会挤满与 UI 相关的内容,因此您的代码更加简洁。

  3. 对于刚开始开发应用程序的人来说,使用故事板更容易,并且让他们有信心看到正在构建的东西。

最重要的是这取决于您的情况,您应该明智地选择,假设您的静态 UI 没有太大变化或动画,使用故事板总是更容易和更快,但是如果您有一些动态 UI 像它有很多动画,你需要操纵你的约束,然后更容易以编程方式构建你的 UI

还要记住,XIB 文件的加载时间比以编程方式构建 UI 的时间要长。

【讨论】:

  • 对于你的问题 - 你需要支持不同的屏幕尺寸(从 iPhone 4 到 iPhone6+),最好是使用自动布局,只要从这个链接 raywenderlich.com/50317/… 阅读一些基础知识,一旦你开始它处理不同的屏幕尺寸非常容易和整洁
猜你喜欢
  • 1970-01-01
  • 2012-11-03
  • 2013-04-30
  • 1970-01-01
  • 2012-10-08
  • 2021-08-29
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多