使用以编程方式创建的视图使用自动布局有什么好处?

时间:2015-03-20 17:56:41

标签: ios swift autolayout

自动布局约束允许我完美地调整视图的大小和布局,而不事先知道它们将在哪个屏幕上呈现。当我在故事板上绘制UI时,这种方法运行得相当不错。

让我们继续以编程方式创建视图。

我的应用程序正在运行,界面已在屏幕上呈现,我有所有必要的坐标,并且已完成大小调整。
我想动态创建一些视图,例如:

  • a UIImageView,只需按一下按钮即可显示动画,然后消失
  • 自定义UIView的集合,根据基础数据模型在屏幕上创建和布局(想象一下这里的一系列事件,安排在自定义时间轴上)

在类似的场景中,我仍然倾向于使用好的旧帧,例如:

let myView = UIView(frame: CGRectMake(x, y, w, h))

不添加任何NSLayoutConstraint

考虑到增加的复杂性,是否有使用约束的明显优势,特别是当您需要为视图设置动画时?

1 个答案:

答案 0 :(得分:0)

最重要的方面是你实际计算你的框架(哪种方法),如果你想要普遍支持,你需要支持各种方向。

在viewController中,如果您在self.viewviewDidLoadviewWillAppear:中打印出viewWillLayoutSubviews框架,它可能会有不同的值。最终框架(例如,iPhone 6 plus的框架)不在viewDidLoad中计算。因此,如果您在那里进行视图设置,则计算将是错误的。

但是有了约束,你添加它们的位置并不重要。您可能需要在视图更改后调用layoutIfNeeded,但您无需担心天气帧的最终值。

对于仅在短时间内可见的视图,自动布局可能会对不同的方向产生影响。通过使用框架,您必须在方向更改回调中更新临时视图的框架。

此外,如果在故事板中使用自动布局,则使用静态框架以编程方式创建的视图可能无法提供您期望的结果。但是,当然,这取决于您项目的特殊性。