添加视图。 故事板VS. 以编程方式

我一直在与这个斗争很长一段时间。 比方说,我有一个UIViewController,并需要在该控制器中放置一个UIImage的UIImageView。 所以我有两种方法来做到这一点:

1.)通过故事板

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

此外,我需要支持不同的屏幕尺寸(从iPhone 4到iPhone6 +),自动布局约束对我来说还不完全清楚。 而且我很喜欢

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

我觉得我做错了什么。 当我开始学习Objective-C的时候,我已经看到了一些开源项目,并没有任何故事板,所以我认为以编程方式添加视图是一个很好的做法。

你可以给我解释一下“正确的方法”吗?

我会说大多数时候故事板与自动布局是最好的select。 它具有许多优点:

  • 它将演示与逻辑分开。 在控制器中创build整个界面通常是一个糟糕的devise。 而对于简单的接口来说,一个必要的方式声明它们会带来很多开销。 通常情况下,最终会有数百行界面代码,可以在10分钟内在故事板或xib中完成,而不需要任何努力。

  • 通过故事板,您可以看到一个伟大的所见即所得的编辑器,您可以在不同的设备上看到屏幕如何显示,而无需重build项目并在数十个设备或模拟器上运行。 那么,不是几十个,但4个不同的分辨率为iPhones + 2决议iPad仍然很多。 此外,在视网膜和非视网膜屏幕之间的文本大小和渲染方面可能会有细微差别

  • 自动布局。 当然,你也可以在代码中使用它,但是为它们默认的苹果界面很吸引人。 有一些第三方的库让自动布局工作变得简单一些,不过无论如何,在故事板中,80%以上的代码根本不用担心代码的自动布局。 其余的20%就像是给控制器添加约束sockets,然后用一行代码改变它的常量或优先级

  • 大小类。 再一次,你可以用代码和他们一起工作,但是你可能不会用故事板。 大小类别允许您为所有可能的设备forms因素,不同的设备方向等提供单一界面。在大小类别之前,开发人员必须为iPhone和iPad提供2组不同的界面。

但是,有些地方的故事板不是实现目标的最佳途径。 例如,如果您有一些在应用程序的不同位置使用的视图。 仅使用故事板的方法,你必须在许多地方都有这个视图的副本,所以当对其中一个视图进行更改时,你必须记得在其他副本中进行更改。 在这种情况下,最好使用带有这种视图的单独的xib文件,然后在故事板中使用它。

而且,自动布局在性能方面可能相当昂贵。 因此,如果您的应用程序启动滞后,并且您确定( 使用分析器 )自动布局例程是滞后的原因 – 那么手动在代码中处理特定视图的创build和布局可能是有意义的。 但是这只是一个非常复杂的界面。 大部分时间performance不会是一个问题。

你说自动布局不清楚。 这不是拒绝使用它的原因。 您必须做更多的工作才能使所有设备上的应用看起来不错,而不是自动布局。 你看到的“一些开源项目”可能是为第一批iPhone(4s以前)编写的,它们的分辨率都是相同的,所有大小和位置都可以硬编码。 现在,正如我刚才所说,我们有几十个不同的决议。 而手动处理所有的代码是一个真正的斗争。 Autolayout会让你的生活更轻松:)

你也可以看看这些关于何时何地使用storyboard,xibs和手动视图处理的争论: http ://www.raywenderlich.com/51992/storyboards-vs-nibs-vs-code-the-great-debate

在同一个网站上( http://www.raywenderlich.com ),你也可以查看自动布局教程来更好地理解它。

这两种方式都有自己的优势,作为一个程序员,你应该对这两者都感到满意,并根据自己的情况使用哪一种,有时易于使用storyboard / xib,有时可以通过编程方式轻松构build视图

以编程方式创build视图的一些优点 –

  1. 最好与团队合作。 合并代码并解决冲突时,比提交故事板时更容易。

  2. debugging时,更容易追踪错误,而不必看IB。

  3. 以编程方式创build视图给你更多的控制

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

  1. 在storyBoard中开发视图更快,它可以帮助你把所有的东西放在一起,比如集中视图,调整视图,连接他们的行为等等。

  2. 你的代码不是与UI相关的东西拥挤,所以你有更清洁的代码。

  3. 对于刚开始开发应用程序的人来说,他们使用故事板也相当容易,并且可以让他们自信地看到自己正在构build的东西。

底线是取决于你的情况,你应该明智地select,假设你有静态的用户界面,不会改变太多或animation,它总是更容易和更快速地使用故事板,但如果你有一些dynamic的用户界面,像它有很多的animation和你需要操纵你的约束,那么它更容易以编程方式构build你的用户界面

另外请记住,XIB文件加载时间比编程用户界面的时间更长。