2013-02-07 3 views
0

약간의 UIView 하위 클래스를 작성하여 진행 HUD를 표시했습니다. 그 HUD보기는 완벽하게 작동하지만 나는 마지막 날에 약간의 문제에 직면했다.UIView subview 자동 크기 조정

내 응용 프로그램에서 사용자 지정 방식으로 UIViewController를 제공합니다. 사용자가 tableView에서 행을 선택하면 두 번째 viewController의 인스턴스를 만들고 현재 VC로 이동하고 뷰의 높이를 0으로 설정하고 curren VC의 뷰 (선택한 위치에서 하위 뷰로 추가)를 추가합니다. 셀)을 선택하고 높이를 원래대로 되돌립니다.

동작이 매우 멋지며 멋지게 보입니다.

하지만 두 번째보기가 하위보기로 추가되면이보기에 HUD가 추가됩니다. 두 번째보기가 원래 높이로 크기를 조정하면, HUD는 뷰의 상단에 붙어 높은 몇 픽셀 : enter image description here

내가 NSLayoutConstraints와 비트 주위에 연주 ...하지만 나는하지 않았다 그것은 지금까지 일하고 있습니다 ...

누군가 그 사람에 대해 좋은 생각을 갖고 있습니까? 아니면 아무도 이러한 제약 조건에 대해 잘 설명되는 리소스를 잘 알고 있습니까?

HUD는 실제로 작은 창을 하위보기로 사용하는 배경보기입니다. 다른 모든 요소 (진행보기, 레이블 등)는 작은 창 하위보기입니다.

+0

XIB에서보기를로드합니까? 예인 경우 자동 레이아웃 하위 뷰의 선택을 취소하고 모든 가능한 위치 뷰 배열을 끄기로 설정하십시오. XIB 용 프레임을 설정할 위치에서 수행 할 수 있습니다. – Mohammad

+0

불행히도, 트릭을하지 못했습니다 ... –

답변

0

좋은 리소스라는 점에서 WWDC2012의 3 가지 비디오 : OSX/iOS 용 자동 레이아웃 소개, 예제 별 자동 레이아웃 및 자동 레이아웃 마스터 링에 대한 권장 사항을 적극 권장합니다. 이것들은 레이아웃에서 모호함을보고 갈등을 다루기위한 팁을 가지고 있습니다.

또 다른 훌륭한 참고 자료는 Erica Sadun의 iOS6 요리 책입니다.

문제가 있습니다. 오류 메시지가 표시되지 않고 XIB에서 전체 진행 HUD를 배치하고 있다고 가정합니다. 그렇다면 xib에서 바라는 것처럼 행동하지 않는 두 가지 제약이있는 것처럼 들리 겠지만 - 수퍼 뷰의 상단부터의 높이와 HUD의 높이

먼저 제약 조건에 대한 콘센트를 만듭니다 .H 파일

@property (strong) IBOutlet NSLayoutConstraint *HUDSuperViewToHUDConstraint; 
@property (strong) IBOutlet NSLayoutConstraint *HUDHeight; 

다음, 먼저 새로운보기를 표시 충돌이 없도록 당신이 HUD와 새의 ViewController를 열 수있는 방법은 제약 조건을 제거에

[HUDSuperView removeConstraint:self.HUDSuperViewToHUDViewConstraint]; 
[HUDSuperView removeConstraint:self.HUDHeight]; 

첫 번째 팀을 위해 [HUDSuperView layoutIfNeeded]를 호출 한 후 전자, 애니메이션 또는 어디든지,이 도움이 ... cheesey

희망을 제약 조건을 추가하고 심지어 모양을 애니메이션 수있는 animateWithDuration 내에서 다음을 호출하는 경우 layoutIfNeeded 다시

[HUDSuperView addConstraint:self.HUDSuperViewToHUDViewConstraint]; 
[HUDSuperView addConstraint:self.HUDHeight]; 
[HUDSuperView layoutIfNeeded]; 

전화 - 아마 더 솔루션 자체가 아니라 솔루션 방향으로 AutoLayout by Example 비디오에서도 17 분과 53 분을 추천합니다.

스티브

+0

아니, 전적으로 프로그래밍 방식으로 HUD를 만들고 있습니다. 그리고 로그에 많은 오류가 발생합니다 ... 이러한 레이아웃 제약 조건을 사용하는 방법을 배워야합니다. 나에게이 개념은 아주 모호하며 사용하기 쉽지 않다. 나는 그것으로 끝난 하나의 간단한 테스트 어플리케이션을 얻지도 않았다. 팁을 주셔서 감사합니다. 나는 WWDC 비디오를 시도해 본다. –

+0

프로그래밍 방식으로이 작업을 수행하는 경우 그 점이 좋습니다. 나는 IB와 투쟁한다. 새 뷰 컨트롤러에 모든 것을 놓은 후 또는 뷰 컨트롤러 뷰가 지시 된 직후에 HUD의 높이 제약 조건을 @ "V : | [HUDView (40)]로 설정하는 것이 좋습니다. (애니메이션?) HUDView가 속한보기에서 layoutIfNeeded를 사용하십시오. 행운을 빕니다 – Steve