自動レイアウトを使用している場合は、translateAutoResizingMaskIntoConstraints
をfalse
に設定してフレームを無視しますが、手動で制約を追加することを忘れないでください。
override func viewDidLoad() {
super.viewDidLoad()
// no auto layout
let v = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
v.backgroundColor = UIColor.blue
view.addSubview(v)
// with auto layout
let v2 = UIView()
v2.backgroundColor = UIColor.red
// use auto layout
v2.translatesAutoresizingMaskIntoConstraints = false
// add width/height constraints
v2.addConstraint(NSLayoutConstraint(item: v2, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 100))
v2.addConstraint(NSLayoutConstraint(item: v2, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 100))
// must add to hirarchy before adding the following constraints
view.addSubview(v2)
view.addConstraint(NSLayoutConstraint(item: v2, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 100))
view.addConstraint(NSLayoutConstraint(item: v2, attribute: .top, relatedBy: .equal, toItem: view, attribute: .top, multiplier: 1, constant: 0))
// auto layout, visual format
let v3 = UIView()
v3.translatesAutoresizingMaskIntoConstraints = false
v3.backgroundColor = UIColor.green
let views = [ "v3" : v3 ]
// must add v3 as subview before adding constraints referencing the parent view
view.addSubview(v3)
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-200-[v3(100)]", options: [], metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[v3(100)]", options: [], metrics: nil, views: views))
}
多くのビューのために、いくつかのビューは、彼らがintrinsicContentSize
で希望のサイズを提供してサイズを指定する必要はありません:
は、ここで簡単な例です。
ボタンのためにボタンを使用して、必要なサイズにするか、または制約を使用して別のサイズにすることができます。
カスタムビューの場合、このプロパティをオーバーライドして、独自の「必要なサイズ」のロジックを提供できます。
'let button = UIButton()'、 'view.addSubview(button)'、制約を追加するより。 – shallowThought