Swift UITextField 调整大小

Swift UITextField resize

我想为 iPhone 5,6,6+ 开发一款应用。所以,每个元素都必须调整它的大小。我无法调整大小 UITextField

我找到的唯一方法是调用 self.view.addSubview()。如果我想让 UITextField 变大而不是变小,它就可以工作。我怎样才能改变电流 UITextField?

你能推荐点什么吗?

您想使用 Auto Layout and probably Auto Layout’s Visual Format Language.

为了将来的证明,您可能还想使用 Size Classes,但我会离题。

我将包括一个示例,说明如何以编程方式为 UILabel 之类的简单内容执行此操作,因为编码部分似乎比 Interface Builder 的东西更容易让人绊倒。如果您想走那条路,可以 Google Interface Builder Auto Layout 教程。

自动布局使用 NSLayoutConstraints 来描述一个视图相对于另一个视图的布局方式。您可以创建这些约束并将它们添加到“父”视图(包含其他视图的包含视图)。视图控制器有一个名为“view”的默认视图,您可能会在其中添加大部分内容,因此我们将向其添加约束。 Visual Format Language 的输入稍微少一点,而且更直观一点,所以我会用它做一个例子,但如果你遇到它做不到的事情,你可以查看如何在没有 Visual Format Language 的情况下创建约束。

下面是一个使用自动布局的视觉格式语言的宽度为 100、高度为 50 的 UILabel 示例:

override func viewDidLoad() {
  super.viewDidLoad()

  // First add the label to the parent view
  let label = UILabel()
  label.setTranslatesAutoresizingMaskIntoConstraints(false) // Not needed when using Auto LayoutS
  label.text = “Test Label”
  label.sizeToFit() // We didn’t pass a frame/rect to UILabel() so this gives it an intrinsic size
  view.addSubview(label)

  // Create an NSLayoutConstraint for the width and add it to the parent view
  let labelWidthConstraint: NSArray = NSLayoutConstraint.constraintsWithVisualFormat("H:[label(100)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary) // This uses Auto Layout’s Visual Format Language, which is what the H:[label(100)] part is, and is a *little* simpler than creating constraints normally.
  view.addConstraints(labelWidthConstraint)

  // Create an NSLayoutConstraint for the height and add it to the parent view
  let labelHeightConstraint: NSArray = NSLayoutConstraint.constraintsWithVisualFormat("V:[label(50)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
  view.addConstraints(labelHeightConstraint)
}

注意:您需要在您创建的视图上调用 setTranslatesAutoresizingMaskIntoConstraints(false) 以便它们使用自动布局,但不要在“父”视图上调用它,例如带有查看控制器。

希望对您有所帮助。