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