在哪里为MVC设置编程约束

时间:2017-04-25 21:51:06

标签: ios swift model-view-controller

我想练习使用没有故事板创建简单的应用程序。我能够以编程方式(缓慢地)执行约束,但我还想练习将我的代码分离到MVC中。是否有一个特定的地方/方法我应该编写程序式约束?或者没关系?

2 个答案:

答案 0 :(得分:1)

评论中的讨论很好。我的想法,基于那个讨论?

在理解 主观的问题后,您可以放置​​约束:

  • 最早在视图控制器的生命周期中工作。
  • 尽可能“接近”视图。
  • 如果这是常见的事情,请尽量使其更具通用性。
  • 了解 具体内容如何适合所有内容。

(理解,问题不仅限于约束。它可以应用于层次结构,UI,甚至是数据库表,当你开始使用它时!)

坚持约束,我的答案......

(1)使用UIViewControllerUIView生命周期。

通常,视图生命周期为loadViewviewDidLoadviewWillAppearviewWillLayoutSubviewsviewDidLayoutSubviewsviewDidAppeargreat 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。我希望这会有所帮助。