2017-01-22 7 views
0

프로그래밍 방식으로 UIBUtton을 추가한다고 가정합니다. 모든 UIView 생성자는 CGFrame이 필요하지만 내 경우에는 크기가 intrinsic이고 위치가 수퍼 뷰의 중심에 고정되어야합니다.Swift : 초기화 중에 프레임을 제공하지 않고 프로그래밍 방식으로 단추 추가

  • 프레임을 제공하지 않고 UIBUtton 요소를 인스턴스화하면 디버그 뷰 계층 구조에는 표시되지만 화면에는 표시되지 않습니다.
  • 프레임을 제공하면 기본적으로 크기를 추측하고 x,y 값은 나중에 추가 할 제약 조건을 제동합니다.

프로그래밍 방식으로 버튼을 추가하는 적절한 방법은 무엇입니까?

감사합니다.

편집 : 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로 원하는 크기를 제공하기 때문에 크기를 지정할 필요가 없습니다 :

다음은 간단한 예입니다.
단추에 필요한 크기로 만들거나 제한을 사용하여 다른 크기로 강제 설정할 수 있습니다.
사용자 정의보기의 경우 -이 속성을 재정 의하여 사용자가 '필요한 크기'논리를 제공 할 수 있습니다.