viewDidLayoutSubviews和NSLayoutConstraint之间的区别



请解释差异。我在YouTube(链接(上观看课程

这家伙使用viewDidLayoutSubviews,而他本可以使用NSLayoutConstraint。

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
firstNameField.frame = CGRect(x: 30,
y: imageView.bottom+10,
width: scrollView.width-60,
height: 52)
}

示例NSLayoutConstraint.激活

NSLayoutConstraint.activate([
firstNameField.heightAnchor.constraint(equalToConstant: 52),
firstNameField.bottomAnchor.constraint(equalTo: imageView.bottomAnchor, constant: -10),
and e.t.c

])

我以前没有使用过viewDidLayoutSubviews,哪种方法是正确的?

与使用值手动设置帧相比,约束方法/Autolayout更可取。遵循约束方法为您提供了基于附近视图动态管理布局的灵活性,大小类和基于乘数的约束可以用于根据屏幕大小或视图大小相对调整视图。

约束方法优势:

  • 动态布局
  • 尺码等级/特点
  • 相对布局
  • 优先级
  • 内在尺寸
  • 当你支持多种形状因素时,这很容易,而基于框架的方法可能需要重新设计

方法viewDidLayoutSubviews是一个回调函数,一旦视图调整了所有视图的位置,就会通知它。

苹果文档

当视图控制器的视图的边界发生变化时,视图会调整其子视图的位置,然后系统调用此方法。但是,被调用的此方法并不表示视图子视图的各个布局都已调整。每个子视图负责调整自己的布局。您的观点控制器可以覆盖此方法以在视图之后进行更改列出其子视图。此方法的默认实现没有什么

要回答您的问题,这取决于您想通过viewDidLayoutSubviews通知后调整子视图来实现什么

即使在方法viewDidLayoutSubviews中,也可以对帧使用约束。

最新更新