我想练习使用没有故事板创建简单的应用程序。我能够以编程方式(缓慢)执行约束,但我也想练习将代码分离为MVC。有没有一个特定的地方/方法可以写出程序化的约束条件?或者没有关系?在哪里把MVC的编程约束
回答
在评论中很好的讨论。我的想法,基于这个讨论?
有了一种认识问题是主观的,你把你的约束:
- 在视图控制器的生命周期中最早他们在哪里工作。
- 尽可能“接近”视图。
- 如果这是常见的事情,尽可能通用。
- 了解如何你的细节适合所有的东西。
(理解,问题不限于约束。它可以适用于层次结构,用户界面,甚至数据库表,当你下来吧!)
坚持限制,我的答案.. ...
(1)使用UIViewController
和UIView
生命周期。
普遍认为生命周期是loadView
,viewDidLoad
,viewWillAppear
,viewWillLayoutSubviews
,viewDidLayoutSubviews
,和viewDidAppear
。 great SO answer detailing this.
我相信这loadView
是限制为时尚早,但不viewDidLoad
- **只要你不期待知道帧的大小。虽然很多人说viewDidLayoutSubviews
是正确的地方,但我发现大部分时间都是如此。无论哪种方式,尽快设置您的约束!
(2)尽量接近视野。
如果您有子视图 - 我有一个“ToolBar”类对象 - 您希望至少尽可能地在该类中编码约束。例如,在我的工具栏中,它滑出,具有按钮,甚至可以根据方向旋转。 只有约束没有里面这些类是为方向 - 所有者是(我相信应该是)视图控制器实例化它。
(3)使其具有通用性。
我打算在几个应用程序中使用此工具栏。所以我做的第一件事就是将它添加到框架中。这个框架是需要的,因为我有一个应用程序,我提供了一个照片编辑的快速 - “编辑”屏幕尽可能相同。最后,我移动所有我的约束。 (至少尽可能多)任何我认为是可重用的东西。
(4)了解您的应用的具体要求。
这应该是显而易见的。如果您需要针对各种方向进行编码,请使用阵列并激活/停用它们。 (YES,一个常见的错误是替换它们!那是在和自己的一些重大难题。)
如果可以让事情变得活跃,声明约束,设置`isActive = true1,忘掉它。如果您需要调整该约束的常量或乘数,则在声明名称中,然后在需要修改的位置执行该操作。
我的结论是?自动布局是一个非常有用的工具 - 在代码中更是如此。但代码的位置就像是在询问“如何为OOP应用程序编写自动租赁代码”或“如何为汽车租赁设计数据库”。它不仅仅是一门艺术,还有很多答案。这些是我试图遵循的“规则” - YMMV。
要开始使用这种开发方式,我建议您查看Let's Build That App,因为他深入了解完全使用代码设置复杂应用程序的非常深入的示例,没有故事板。
他构造约束的方式是使用UIView
的自定义实现,这样您的查看代码与ViewController
分开。然后,在viewDidLoad
方法中,您可以使用类似self.view = MyView()
的东西实例化您的UIView
的实现。
我写了一些这样的应用程序。主要缺点是可能很难做出快速调整,而且您确实需要了解您可以使用的所有不同类型的约束条件。
Here's a pastebin我做这个时使用了一些扩展。我希望这有帮助。
- 1. 在哪里把htaccess文件为php MVC
- 2. asp.net的MVC从哪里把结构
- 3. 约束布局改变约束编程
- 4. 在java中约束编程
- 5. 笨在哪里把
- 6. 在哪里把ViewModel
- 7. 创建ContentProviders时,应用程序逻辑和约束在哪里?
- 8. PHP中的约束编程
- 9. 在哪里把日志记录到MVC应用程序
- 10. 在哪里把DQL的?
- 11. 在哪里把Mssnto的CSS
- 12. 在哪里把编译JS在NodeJS应用程序
- 13. 哪里把批处理过程在joomla
- 14. 在Android工作室的约束布局部分在哪里
- 15. 使用CONSTRUCT的SPIN约束:CONSTRUCT的三元组在哪里去?
- 16. UIView编程宽度约束
- 17. 约束编程入门
- 18. 使用Python约束编程
- 19. UISearchBar忽略编程约束
- 20. 你把元编程放在rails中哪里?
- 21. 你在哪里把cfimport
- 22. 你把ivysettings.xml放在哪里?
- 23. 把drawRect放在哪里?
- 24. 在哪里把uiautomator测试
- 25. 我在哪里把response.success()?
- 26. 我在哪里把composer.json
- 27. 把JavaScript放在哪里
- 28. 把bootstrapper放在哪里?
- 29. 在哪里把ActiveModel :: Validator?
- 30. 我在哪里把substr?
例如,您可以将约束放在UIView(或UITableViewCell)的子类中,然后将该视图添加到您的UIViewController或在您的tableView中使用客户单元格。 – mat
@mat,但是没有“最佳实践”或内置约束条件的方法? – RubberDucky4444
我个人创建了一个名为'setupViews()'的方法,其中添加了所有子视图和约束,然后在init函数中调用该方法。我不确定这是否是最佳做法;) – mat