您是否计划拥有 宽度:100 和 高度:的平方 UIView
100 在UIViewController 的UIView 内居中?如果是这样,你
可以尝试以下 7 个 Swift 3 Auto Layout sn-ps 之一:
1。 NSLayoutConstraint + addConstraints(_ constraints: [NSLayoutConstraint]) 风格
override func viewDidLoad() {
super.viewDidLoad()
let newView = UIView()
newView.backgroundColor = UIColor.red
newView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(newView)
let horizontalConstraint = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.centerX, relatedBy:
NSLayoutRelation.equal,toItem:视图,属性:
NSLayoutAttribute.centerX,乘数:1,常数:0)
let verticalConstraint = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.centerY, relatedBy:
NSLayoutRelation.equal,toItem:视图,属性:
NSLayoutAttribute.centerY,乘数:1,常数:0)
让 widthConstraint = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal,
toItem:无,属性:NSLayoutAttribute.notAnAttribute,乘数:
1、常数:100)
let heightConstraint = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.height, relatedBy:
NSLayoutRelation.equal,toItem:无,属性:
NSLayoutAttribute.notAnAttribute,乘数:1,常数:100)
view.addConstraints([horizontalConstraint, verticalConstraint, widthConstraint, heightConstraint])
}
2。 NSLayoutConstraint + activate(_ constraints: [NSLayoutConstraint]) 风格注意:`activate(_ 约束:
[NSLayoutConstraint])` 需要 iOS 8
override func viewDidLoad() {
super.viewDidLoad()
let newView = UIView()
newView.backgroundColor = UIColor.red
newView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(newView)
let horizontalConstraint = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.centerX, relatedBy:
NSLayoutRelation.equal,toItem:视图,属性:
NSLayoutAttribute.centerX,乘数:1,常数:0)
let verticalConstraint = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.centerY, relatedBy:
NSLayoutRelation.equal,toItem:视图,属性:
NSLayoutAttribute.centerY,乘数:1,常数:0)
让 widthConstraint = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal,
toItem:无,属性:NSLayoutAttribute.notAnAttribute,乘数:
1、常数:100)
let heightConstraint = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.height, relatedBy:
NSLayoutRelation.equal,toItem:无,属性:
NSLayoutAttribute.notAnAttribute,乘数:1,常数:100)
NSLayoutConstraint.activate([horizontalConstraint, verticalConstraint, widthConstraint, heightConstraint])
}
3。纯视觉格式语言风格+addConstraints(_ constraints: [NSLayoutConstraint])风格
override func viewDidLoad() {
super.viewDidLoad()
let newView = UIView()
newView.backgroundColor = UIColor.red
newView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(newView)
let views = ["view": view, "newView": newView]
let horizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat:
"H:[view]-(
view.addConstraints(horizontalConstraints)
view.addConstraints(verticalConstraints)
}
4。 NSLayoutConstraint + 视觉格式语言 + activate(_ constraints: [NSLayoutConstraint]) 样式注意:`activate(_
约束:[NSLayoutConstraint])` 需要 iOS 8
override func viewDidLoad() {
super.viewDidLoad()
let newView = UIView()
newView.backgroundColor = UIColor.red
newView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(newView)
let horizontalConstraint = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.centerX, relatedBy:
NSLayoutRelation.equal,toItem:视图,属性:
NSLayoutAttribute.centerX,乘数:1,常数:0)
let verticalConstraint = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.centerY, relatedBy:
NSLayoutRelation.equal,toItem:视图,属性:
NSLayoutAttribute.centerY,乘数:1,常数:0)
let views = ["newView": newView]
let widthConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:[newView(100)]",
选项:NSLayoutFormatOptions(rawValue: 0),指标:nil,视图:
意见)
让 heightConstraints = NSLayoutConstraint.constraints(withVisualFormat: "V:[newView(100)]",
选项:NSLayoutFormatOptions(rawValue:0),指标:无,视图:
意见)
NSLayoutConstraint.activate([horizontalConstraint, verticalConstraint])
NSLayoutConstraint.activate(widthConstraints)
NSLayoutConstraint.activate(heightConstraints)
}
5。 UIViewAutoresizing style 注意:Springs 和 Struts 在运行时会被翻译成相应的自动布局约束。
override func viewDidLoad() {
super.viewDidLoad()
let newView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
newView.backgroundColor = UIColor.red
newView.translatesAutoresizingMaskIntoConstraints = true
view.addSubview(newView)
newView.center = CGPoint(x: view.bounds.midX, y: view.bounds.midY)
newView.autoresizingMask = [UIViewAutoresizing.flexibleLeftMargin,
UIViewAutoresizing.flexibleRightMargin,
UIViewAutoresizing.flexibleTopMargin,
UIViewAutoresizing.flexibleBottomMargin]
}
6。 NSLayoutAnchor + activate(_ constraints: [NSLayoutConstraint]) 样式注:`activate(_ 约束:
[NSLayoutConstraint])requires iOS 8,NSLayoutAnchor` 需要 iOS 9
override func viewDidLoad() {
super.viewDidLoad()
let newView = UIView()
newView.backgroundColor = UIColor.red
newView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(newView)
let horizontalConstraint = newView.centerXAnchor.constraint(equalTo: view.centerXAnchor)
let verticalConstraint = newView.centerYAnchor.constraint(equalTo: view.centerYAnchor)
let widthConstraint = newView.widthAnchor.constraint(equalToConstant: 100)
let heightConstraint = newView.heightAnchor.constraint(equalToConstant: 100)
NSLayoutConstraint.activate([horizontalConstraint, verticalConstraint, widthConstraint, heightConstraint])
}
7。子类化 + activate(_ constraints: [NSLayoutConstraint]) 样式注意:activate(_ constraints: [NSLayoutConstraint]) 需要
iOS 8,NSLayoutAnchor 需要 iOS 9
import UIKit
class CustomView: UIView {
override var intrinsicContentSize: CGSize {
return CGSize(width: 100, height: 100)
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let newView = CustomView()
newView.backgroundColor = UIColor.red
newView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(newView)
let horizontalConstraint = newView.centerXAnchor.constraint(equalTo: view.centerXAnchor)
let verticalConstraint = newView.centerYAnchor.constraint(equalTo: view.centerYAnchor)
NSLayoutConstraint.activate([horizontalConstraint, verticalConstraint])
}
}