2016-10-15 4 views
2

현재 AutoLayout에 어려움이 있습니다. 나는 인터페이스 빌더를 사용하고 있으며 100 * 100의 두 uiview 블록을 배치하려고합니다. 첫 번째 블록이 superview로 연결되는 방식으로 배치 된이 블록이 필요합니다. 두 번째 블록이 superview로 이어지는 것과 동일합니다. 화면 폭에 따라 동일하게 변경됩니다. 스택 뷰를 사용해 보았습니다 giving fixed width to stackview seems to be equally spaced in 4s but not on 6s. 건너 뛰기 폭이 고정되어 있지 않으면 블록간에 더 큰 간격이 생깁니다. as here.iOS Autolayout : 동일한 너비와 동일한 간격으로 두 번보기

인터페이스 작성기를 통해이를 수행 할 수 있습니까? 도움을 주셔서 감사합니다.

+1

스택 뷰 내부의 뷰의 높이와 너비가 변경되어야합니까? 아니면 미리 결정된 값으로 고정되어야합니까? – Adeel

+0

예,이 블록 폭 n 높이는 4에서 6s까지 100으로 일정합니다. ipad의 경우이 값은 150으로 변경됩니다. – khanHussain

답변

1

IB는이 문제를 매우 능숙하게 처리하지 못합니다. kludgy 솔루션은 "spacer"뷰를 추가하는 것입니다 (자동 레이아웃에서 간격을두기 위해 추가 할 뷰이지만 보이지는 않을 것입니다). 그냥 스페이서보기는 동일한 너비하고 다음 중 하나를 스택보기에서이 다섯 개 가지 견해를 떨어 뜨리거나 서로 맞 닿아 오 뷰 그래서 그냥 수평 제약 조건을 설정 :

enter image description here

그런 다음, 바로 스페이서 전망을 배경으로 설정 투명 색상, 그래서 우리는 그들을 볼 수 없습니다, 당신은 당신이 원하는 간격해야합니다 :

enter image description here


(나는 그러나 다만 FO, 당신은 일을하지 않을 알고있는 프로그램이 작업을 수행하는 경우 R 완성도의 술), 이러한 눈에 보이지 않는 스페이서보기보다는 UILayoutGuide을 사용하십시오 :

let view1 = ... 
let view2 = ... 

let layout1 = UILayoutGuide() 
view.addLayoutGuide(layout1) 
let layout2 = UILayoutGuide() 
view.addLayoutGuide(layout2) 
let layout3 = UILayoutGuide() 
view.addLayoutGuide(layout3) 

let views: [String: Any] = ["view1": view1, "view2": view2, "layout1": layout1, "layout2": layout2, "layout3": layout3] 

view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[layout1][view1(==100)][layout2(==layout1)][view2(==100)][layout3(==layout1)]|", options: .alignAllCenterX, metrics: nil, views: views)) 

view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-[view1(==100)]", options: [], metrics: nil, views: views)) 
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-[view2(==100)]", options: [], metrics: nil, views: views)) 

그것은 애플이 여전히 아직, IB에 배치 가이드를 추가하지 않았습니다 것을 다소 놀라운.

+0

감사합니다. Rob.I는 스페이서보기 솔루션을 사용했습니다. – khanHussain