我想练习使用没有故事板创建简单的应用程序。我能够以编程方式(缓慢地)执行约束,但我还想练习将我的代码分离到MVC中。是否有一个特定的地方/方法我应该编写程序式约束?或者没关系?
答案 0 :(得分:1)
评论中的讨论很好。我的想法,基于那个讨论?
在理解 主观的问题后,您可以放置约束:
(理解,问题不仅限于约束。它可以应用于层次结构,UI,甚至是数据库表,当你开始使用它时!)
坚持约束,我的答案......
(1)使用UIViewController
和UIView
生命周期。
通常,视图生命周期为loadView
,viewDidLoad
,viewWillAppear
,viewWillLayoutSubviews
,viewDidLayoutSubviews
和viewDidAppear
。 great SO answer detailing this.
我相信 loadView
对于约束来说太早了,但不是viewDidLoad
- **,前提是您不希望知道帧大小。虽然许多人说viewDidLayoutSubviews
是正确的地方,但我发现viewWillLayoutSubviews
大部分时间都适用。无论哪种方式,都要尽快设置约束!
(2)尽可能靠近视图。
如果你有子视图 - 我有一个“ToolBar”类对象 - 你希望约束,至少尽可能在类中编码。例如,在我的工具栏中,它会滑出,有按钮,甚至可以在方向上旋转。 这些类 p>
(3)让它具有普遍性。 我打算在几个应用中使用此工具栏。所以我做的第一件事就是将它添加到框架中。这个框架是必需的,因为我有一个应用程序,我提供了照片编辑的张力 - 并且“编辑”屏幕尽可能相同。最后,我在那里移动所有我的约束。 (至少尽可能多。)我相信任何可以重复使用的东西。 (4)了解应用的具体要求。 这应该是显而易见的。如果需要为各种方向编码,请使用数组并激活/停用它们。 (是的,一个常见的错误就是取代它们!这让你自己陷入了一些重大的麻烦。) 如果可以保持活动状态,请声明约束,设置`isActive = true1,然后忘掉它。如果您需要调整约束的常量或乘数,请在声明 name 中,然后在需要更改它的地方进行调整。 我的结论?自动布局是一个非常有用的工具 - 在代码中更是如此。但代码的放置就像问“如何为自动租赁编写OOP应用程序代码”或“如何为汽车租赁设计数据库”。它不仅仅是一门艺术,还有很多答案。这些是我试图遵循的“规则” - YMMV。
答案 1 :(得分:1)
要开始使用这种开发方式,我建议您查看Let's Build That App,因为他会通过非常深入的示例完整地在代码中设置复杂的应用程序,而无需使用故事板。
他构建约束的方式是使用UIView
的自定义实现,这样您的视图代码就会与ViewController
分开。然后,在viewDidLoad
方法中,您可以使用类似UIView
的内容来实例化self.view = MyView()
的实现。
我写了几个这样的应用程序。主要的缺点是快速调整变得非常困难,你真的需要了解可以使用的所有不同类型的约束。
我在执行此操作时使用的某些扩展程序的{p> Here's a pastebin。我希望这会有所帮助。