2017-01-22 3 views
0

プログラムでUIBUttonを追加したいとします。すべてUIViewのコンストラクタにはCGFrameが必要ですが、私の場合、サイズは組み込みで、スーパービューの中心に固定する必要があります。Swift:初期化中にフレームを供給せずにプログラムでボタンを追加する

  • 私はフレームを供給することなく、UIBUtton要素をインスタンス化した場合、私は、デバッグビュー階層ではなく、画面上にそれを参照してください。
  • 私はフレームを供給すれば、基本的にサイズを推測して、x,yの値が後で追加する制約を抑えます。

プログラムでボタンを追加する適切な方法は何ですか?

ありがとうございます!

EDIT:CGFrameなしでインスタンス化することに問題はありません。追加しなかったためボタンが表示されませんでした

button.translatesAutoresizingMaskIntoConstraints = false 

これはインターフェイスビルダーによって自動的に行われます。

+0

'let button = UIButton()'、 'view.addSubview(button)'、制約を追加するより。 – shallowThought

答えて

1

自動レイアウトを使用している場合は、translateAutoResizingMaskIntoConstraintsfalseに設定してフレームを無視しますが、手動で制約を追加することを忘れないでください。

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で希望のサイズを提供してサイズを指定する必要はありません:

は、ここで簡単な例です。
ボタンのためにボタンを使用して、必要なサイズにするか、または制約を使用して別のサイズにすることができます。
カスタムビューの場合、このプロパティをオーバーライドして、独自の「必要なサイズ」のロジックを提供できます。

関連する問題