2013-07-18 3 views
0

샘플 앱에서 AutoLayout을 사용하고 있습니다. 나는 세 가지보기, topView, middleView, bottomView.Following 내가 필요로하는 제약 조건입니다을 가지고자동 레이아웃을 사용하여보기를 조정하는 방법은 무엇입니까?

topView :

  1. 항상 X 원점에서 시작 (10)
  2. 왼쪽 및 오른쪽 여백 (10)
  3. 높이는 화면 경계 (또는 수퍼 뷰)에 따라 달라야합니다.

middleView :

  1. 상단과 중간 뷰 사이에 10 픽셀 수직 여백이 있어야합니다.
  2. 왼쪽 및 오른쪽 여백 10.
  3. 높이는 화면 범위 (또는 수퍼 뷰)에 따라 달라야합니다.

bottomView :

  1. 중간과 하단보기 사이에 10 픽셀 수직 여백이 있어야합니다.
  2. 왼쪽 및 오른쪽 여백 (10)
  3. 높이라고, 내가 장치 화면 크기에 따라, 하단보기 Y 원점이되도록 중간 및 상위 뷰 크기가 조정됩니다 변경해야합니다 (30)

일정해야 . 중간 뷰에 대한 수퍼하는

  1. 최고의 공간 : 문제는 여기 하단보기 및 인터페이스의 y 원점과 같은 영구적 인 제약 조건을 제공해야한다 무엇을 찾을 수있는 방법이 없다입니다.
  2. 아래쪽보기에 수퍼 뷰를 표시하는 위쪽 공간입니다.

이것은보기의 높이를 찾는 방법이 없기 때문입니다. 상단 및 중간보기 높이를 결정하는 것이 어려움. enter image description here

+1

당신이 가지고있는 문제는 상단과 중간의 높이 (따라서 하단의 위치)가 모호하다는 것입니다. 어떻게 그들을 일하길 원하니? 어떤 유형의 견해입니까? 어떻게 그들의 높이가 작동합니까? 높이는 그 내용에 따라 좌우됩니까? etc ... 또한 어떤 유형의 견해입니까? UITextViews, UIImageViews? 어쩌면 그들은 ... middleView 높이가 topview 높이를 2로 나눈 값입니까? 또는 이와 비슷한 것입니다. 높이를 정의 할 필요가 있습니다. – Fogmeister

+1

Autolayout의 아름다움은 설명 적입니다. 원하는 것을 설명하고 시스템이 계산을 처리합니다. 그러나 시스템이 상단 및 중간 뷰의 높이를 어떻게 크기 지길 원하는지 설명해야합니다. "높이가 달라져야한다"는 것은 실제로 시스템이 사용할 수있는 설명이 아닙니다. 우리에게 당신의 의도를 설명하려고하지 마십시오. 당신이 시스템에 그것을 설명하는 것을 도울 수 있습니까? (예를 들어 가운데보기는 꼭대기보기 높이의 절반이어야합니다.) – Maarten

+0

@Maarten 당신은 그렇게 노력했다는 것보다 훨씬 낫다고 말했습니다. :) 우리가 당신이 어떻게 일하기를 원하는지 설명하고, 우리는 어떤 제약 사항을 해결하려고 노력할 것입니다. 이 효과가 나타납니다. – Fogmeister

답변

2

상단 및 중간 뷰의 높이가 무엇인지 신경 쓰지 않는 것 같습니다. 그래서 나는 당신을 위해 결정을 내릴 것입니다. 그들은 같은 높이를 가질 것입니다.

NSArray *b = [NSLayoutConstraints 
      constraintsWithVisualFormat: @"H:|-(10)-[topView]-(10)-|" 
           options: 0 
           metrics: nil 
           views: dict]; 
NSArray *c = [NSLayoutConstraints 
      constraintsWithVisualFormat: @"H:|-(10)-[middleView]-(10)-|" 
           options: 0 
           metrics: nil 
            views: dict]; 
NSArray *d = [NSLayoutConstraints 
      constraintsWithVisualFormat: @"H:|-(10)-[bottomView]-(10)-|" 
           options: 0 
           metrics: nil 
            views: dict]; 

편집

을 : 당신은 수평뿐만 아니라 그들을 정렬해야합니다

NSString *vfl = @"V:|-(10)-[topView]-(10)-[middleView]-(10)-[bottomView(==30)]-(10)-|"; 
NSDictionary *dict = @{@"topView":_topView,@"middleView":_middleView,@"bottomView":_bottomView}; 
NSArray *a = [NSLayoutConstraints 
        constraintsWithVisualFormat: vfl 
             options: 0 
             metrics: nil 
              views: dict]; 

:이 세 가지보기 (_topView, _middleView 및 _bottomView)이 파단되어있는 일반 수퍼에 다음과 같은 제약 조건을 추가

중간보기는 말 그대로 레이블입니다. 레이블에는 본질적인 콘텐츠 크기가 있습니다. 이 뷰의 높이를 설정하지 않으면 자동 레이아웃 시스템이 본능적으로 수행 할 작업을 알 수 있습니다. (알았지?) _topView의 상단을 수퍼 뷰의 맨 위에 고정하고 하단을 레이블의 상단에 고정함으로써 높이를 자동으로 계산해야합니다. 이를 반영하기 위해 코드를 변경했습니다.

편집, 코드에 제약 조건을 추가 이러한 세 가지보기 중 공통 조상 (수퍼)를 찾아 [superview addConstraints:a],[superview addConstraints:b], etc...는 IB에서 자동 레이아웃의 전원이 꺼져 있는지 확인 작성하고 당신이 translateResizingMasksToConstraints 대상을 설정하는 것이하기 위해 2

NO.

+0

+1 나는 똑같이 할 생각이었습니다. – Fogmeister

+0

위의 코멘트를 참조하십시오. –

+0

내 대답을 업데이트했습니다. – Maarten

관련 문제