我想练习使用无storyboard的方式创建简单应用程序。我能够通过编程实现约束(但速度较慢),但我也想练习将我的代码按MVC模式分离开来。是否有特定的地方/方法,我应该编写程序化约束?或者这并不重要吗?
我想练习使用无storyboard的方式创建简单应用程序。我能够通过编程实现约束(但速度较慢),但我也想练习将我的代码按MVC模式分离开来。是否有特定的地方/方法,我应该编写程序化约束?或者这并不重要吗?
评论区讨论得很好。基于那个讨论,我的想法是?
在理解问题具有主观性的前提下,你会设置约束:
(请注意,问题并不仅限于约束。实际上,当你深入研究时,它还可以应用于层次结构、UI甚至数据库表!)
遵循约束,这是我的答案...
(1)使用UIViewController
和UIView
生命周期。
通常,视图生命周期是loadView
、viewDidLoad
、viewWillAppear
、viewWillLayoutSubviews
、viewDidLayoutSubviews
和viewDidAppear
。 这里有一个很好的SO答案详细介绍这些。
loadView
太早设置约束了,但viewDidLoad
不会——前提是您不希望知道框架大小。虽然很多人说viewDidLayoutSubviews
是正确的地方,但我发现viewWillLayoutSubviews
大多数情况下同样有效。无论哪种方式,尽快设置约束!要开始这种类型的开发,我建议查看 Let's Build That App,他深入地介绍了如何在代码中完全设置复杂应用程序,而不使用storyboards。
他构造约束的方式是使用 UIView
的自定义实现,这样您的视图代码就与 ViewController
分离。然后,在 viewDidLoad
方法中,您可以使用类似 self.view = MyView()
的方法来实例化您的 UIView
实现。
我写了几个这样的应用程序。主要缺点是很难进行快速调整,您真的需要学习所有可以使用的不同类型的约束。
这里有一个pastebin,其中包含我在这方面使用的一些扩展。希望能对您有所帮助。
setupViews()
的方法,在其中添加所有的子视图和约束,然后在 init 函数中调用该方法。虽然我不确定这是否是最佳实践 ;) - Mat