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) 以便它们使用自动布局,但不要在“父”视图上调用它,例如带有查看控制器。
希望对您有所帮助。
我想为 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) 以便它们使用自动布局,但不要在“父”视图上调用它,例如带有查看控制器。
希望对您有所帮助。