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

6
我一直在为这个问题苦恼了很长时间。假设我有一个UIViewController,需要在该控制器中放置一个UIImageView和UIImage。所以我有两种方法可以做到:
1. 通过Storyboard实现;
2. 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时,我看到了一些开源项目,其中根本没有Storyboard,所以我认为以编程方式添加视图是一种好的实践。
能否请您解释一下“正确的方法”?

1
使用带有自动布局和尺寸类的故事板。 - Midhun MP
2个回答

9
我认为大多数情况下,使用具有自动布局的故事板是最好的选择。它具有以下几个优点:
- 它将表现与逻辑分离。在控制器中创建整个界面通常是不好的设计。对于简单的界面,以命令式方式声明它们会带来太多开销。往往你需要为界面编写数百行代码,而这些代码可以在10分钟内使用故事板或xib轻松完成。 - 使用故事板,你有一个很棒的所见即所得编辑器,在不必重新构建项目并在数十个设备或模拟器上运行它的情况下,就可以看到屏幕在不同设备上的外观。嗯,不是数十个,而是4种不同的iPhone分辨率+2种iPad分辨率仍然很多。此外,在视网膜和非视网膜屏幕之间可能存在文本大小和渲染的微小差异。 - 自动布局。当然,你也可以在代码中使用它,但苹果提供的默认接口不够好用。有一些第三方库可以使处理自动布局变得更容易,但是在故事板中使用时, ~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),您还可以查找自动布局教程以更好地理解它。

非常感谢你的回答! - user3046185
故事板有时会妨碍应用程序的架构,因此对于故事板来说这是一个很大的缺点。 - Amber K

2
两种方式各有优点,作为程序员,你应该熟悉两种方式,并根据具体情况选择使用哪一种。有时使用故事板/ XIB 很容易,有时以编程方式构建视图更加容易。
一些以编程方式创建视图的优点:
  1. 与团队合作更好。提交到存储库时,与故事板相比,解决代码合并和冲突更加容易。
  2. 调试时更容易跟踪错误,无需查看 IB。
  3. 以编程方式创建视图可以给您更多的控制权。
一些在故事板中添加视图的优点:
  1. 在故事板中开发视图更快,它可以帮助您将所有内容放在一起,如将视图居中、对齐、连接其操作等。
  2. 您的代码不会因 UI 相关的问题而变得混乱,因此您的代码更加清晰。
  3. 对于刚开始开发应用程序的人来说,使用故事板相当容易,并让他们获得信心,因为他们可以看到他们正在构建的东西。
底线是要根据具体情况进行选择,如果您的 UI 是静态的且不经常更改或动画,则始终使用故事板更容易和更快速。但如果您有一些动态 UI,例如具有许多动画并且需要操作您的约束,则以编程方式构建 UI 更容易。
还要注意,XIB 文件的加载时间比以编程方式构建 UI 更长。

关于你的问题 - 你需要支持不同的屏幕尺寸(从iPhone 4到iPhone6+),最好使用自动布局,只需从此链接http://www.raywenderlich.com/50317/beginning-auto-layout-tutorial-in-ios-7-part-1阅读一些基础知识,一旦开始,处理不同的屏幕尺寸非常容易和整洁。 - Ajay Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接