Swift 程序化 UI 我可以在哪里放置所有约束?

Swift Programmatic UI where can I put all the constraints?

所以我开始学习程序化 UI 在我与 Storyboard 斗争之后。

我基本上弄清楚了在哪里可以存储视图的代码,例如按钮、文本字段等。

但我的问题是我不想在 VC 中看到下面的所有限制。

有什么方法可以将所有这些约束存储在某处或编写一些函数以在每次我想添加约束时调用它们?

我知道当我添加更多组件时它会更长...

例如;

  func configureTextField() {
    self.view.addSubview(usernameTextField)
    
    NSLayoutConstraint.activate([
      self.usernameTextField.topAnchor.constraint(equalTo: self.logoImageView.bottomAnchor, constant: 20),
      self.usernameTextField.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 40),
      self.usernameTextField.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -40),
      self.usernameTextField.heightAnchor.constraint(equalToConstant: 50)
    ])
  }

在我看来,您只是在抱怨自动布局约束代码冗长。你知道吗?你是对的!它 冗长。不像以前那么啰嗦,但还是啰嗦。

程序员使用三种解决方案:

  • 利用堆栈视图。当视图水平或垂直排列时,您可以使用单个堆栈视图来排列它们。堆栈视图是 创建 约束的视图。因此,您不必自己创建这些约束(尽管您必须创建、配置和约束堆栈视图)。

  • 编写方便的方法。比如我们团队有addConstrained(subview:top:left:bottom:right:)这样的方法。我们仍然需要编写一大堆约束代码,但它比你现在一次只写一个锚点要简单和短得多。

  • 使用库。基本上这只是一个 pre-existing 方便方法的集合。例如,很多人喜欢 SnapKit(尽管就我个人而言,我最不想要的代码是另一层依赖,所以我自己不使用它)。