我和这个人一直在斗争很长一段时间。 假设我有一个UIViewController,需要在该控制器中放置一个带有UIImage的UIImageView。 所以我有两种方法可以做到:
1。)通过故事板
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时,我看到了一些开源项目,根本没有故事板,所以我认为以编程方式添加视图是一种很好的做法。
你能否解释一下"正确的方式" ?
答案 0 :(得分:8)
我说大多数情况下自动布局的故事板是最好的选择。它有许多优点:
它将表示与逻辑分开。在控制器中创建整个界面通常是一个糟糕的设计。对于简单的接口,以命令式方式声明它们会带来很多开销。通常,您最终会有数百行代码,可以在10分钟内完成故事板或xib中的操作。
通过故事板,您可以获得精彩的WYSIWYG编辑器,您可以在其中查看屏幕在不同设备上的外观,而无需重建项目并在数十台设备或模拟器上运行。 嗯,不是几十种,而是针对iPad的4种不同分辨率的iPhone + 2分辨率仍然很多。此外,视网膜和非视网膜屏幕之间的文本大小和渲染可能存在微小差异
Autolayout。当然,您也可以在代码中使用它,但默认Apple的界面很糟糕。有一些第三方库使得使用自动布局变得更容易一些,但无论如何使用故事板,在大约80%的时间内你都不会担心代码中的自动布局。剩下的20%就像是向控制器添加约束出口,然后用一行代码改变它的常量或优先级
大小类。再次,您可以在代码中使用它们,但使用故事板,您可能不会这样做。大小类允许您为所有可能的设备形状因子,不同的设备方向等设置单个接口。在大小类之前,开发人员必须拥有2组不同的iPhone和iPad接口。
但是,某些地方的故事板并不是实现目标的最佳方式。例如,如果您有一些在应用程序的不同位置使用的视图。只使用故事板方法,您必须在许多地方拥有此视图的副本,因此在对其中一个进行更改时 - 您必须记住在其他副本中进行此更改。在这种情况下,最好使用单独的 xib 文件,然后在故事板中使用它。
此外,自动布局在性能方面可能非常昂贵。因此,如果您的应用程序开始滞后并且您确定( with profiler )自动布局例程是滞后的原因 - 那么手动处理代码中某些视图的创建和布局可能是有意义的。但这可能只是一个非常复杂的接口。大多数时候,表现不会成为一个问题。
你说自动布局对你来说并不清楚。这不是拒绝使用它的理由。你需要做更多的工作才能让所有设备上的应用看起来都不错,而不需要自动布局。 "一些开源项目"您看到的可能是为第一部iPhone(4s及之前)编写的,所有iPhone都具有相同的分辨率,并且所有尺寸和位置都可以只是硬编码。现在,正如我先前所说,我们已经有了十几种不同的分辨率。并且手动处理所有代码是一个真正的困难。 Autolayout会让你的生活更轻松:)
另外,您可以看看有关何时何地使用故事板,xib和手动视图处理的争论:http://www.raywenderlich.com/51992/storyboards-vs-nibs-vs-code-the-great-debate
在同一个网站(http://www.raywenderlich.com)上,您还可以查找自动布局教程,以便更好地了解它。
答案 1 :(得分:3)
两种方式都有自己的优势,作为程序员,你应该对两者都感到满意,并根据你的情况使用哪一种,有时它易于使用的storyboard / xib,有时它易于以编程方式构建视图
以编程方式创建视图的一些优点 -
最好与团队合作。在提交到存储库时,合并代码和解决冲突比在故事板中更容易。
调试时,更容易追踪错误,您不必查看IB。
在故事板中添加视图的一些优点 -
在storyBoard中开发视图的速度更快,它可以帮助您将所有内容放在一起,例如居中视图,对齐它们,连接它们的操作等。
您的代码中没有与UI相关的内容,因此您可以使用更清晰的代码。
同样对于刚刚开始开发应用程序的人来说,他们使用故事板更容易,并且让他们有信心,因为他们可以看到他们正在构建的东西。
底线是它取决于你的情况,你应该明智地选择,假设你有静态的UI没有变化太大或动画,它总是更容易和更快地使用故事板,但如果你有一些动态的UI像它有很多动画,你需要操纵你的约束,然后更容易以编程方式构建你的
另请注意,XIB文件加载时间比编程UI更长。