2009-11-17 7 views
17

addSubview를 사용할 때 문제가 있습니다.addSubview를 사용하여 추가 할 때 부모에게보기 크기 조정

예제 코드 :

ParentView *myParentView = [[ParentView alloc] initWithNibName:@"ParentView " bundle:nil]; 
ChildeView *myChildeView = [[ChildeView alloc] initWithNibName:@"ChildeView" bundle:nil]; 

//... parent frame resized with setFrame lets say to x:0, y:0, W:320, H:411 

[[myParentView view] addSubview: [myChildeView view]]; 

자녀 추가 부모 다음 더 큰이며, 부모의 경계에 자사의 프레임 크기를 조정하지 않습니다. 부모의 "클립 서브 뷰"를 사용할 수없고 부모 프레임의 크기가 다시 조정되지 않으면 "자동 크기 조정 서브 뷰"가 작동하지 않는 것 같습니다. 하위 뷰를 모든 자식에서 setFrame을 사용하지 않고 부모의 경계에 자동으로 크기를 조정하는 속성이 있습니까?

답변

30

자동 레이아웃을 사용하지 않는 경우 하위보기의 자동 크기 지정 마스크를 설정해 보셨습니까? 이 시도 :

myChildeView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | 
           UIViewAutoresizingFlexibleHeight); 

또한, 자동으로 할 때의 프레임 변화를 서브 뷰의 크기를 조정 부모보기를 얻을

myParentView.autoresizesSubviews = YES; 

를 호출 할 필요가 있습니다.

상위 뷰의 프레임 외부에서 하위 뷰 그리기가 계속 표시되는 경우 상위 뷰에서 내용이 잘리지 않을 가능성이 있습니다. 이 문제를 해결하려면, 당신은 당신의 UIViews에 - (void)didMoveToSuperview 방법을 그것을 항상 할 수

myParentView.clipsToBounds = YES; 
+0

감사를 복사해야합니다. 그러나 이것이 왜 기본 UIView 비헤이비어가 아닙니까? 재미있는 코드를 만들어내는 건가요? 왜 다른 클립으로 Subview 클립을 사용할 수 있습니까? – Luca

+0

하위보기를 추가하기 전에 상위보기의 프레임을 변경하고 있습니까? –

+0

예, 항상 동일한 문제가 발생합니다. – Luca

0

를 호출합니다. 부모로부터 추가되거나 제거 될 때 호출됩니다 (제거 될 때 nil). 그 시점에서 부모의 사이즈로 설정하십시오. 그 시점부터 자동 크기 조정 마스크가 제대로 작동해야합니다.

+0

수퍼바이저에 수퍼 뷰가 변경되었음을 알립니다 (가능한 경우 nil). 그것은 addSubview에서 발생하지 않는 것 같습니다. – Luca

7

상위보기의 프레임을 하위보기로 복사 한 다음 추가하십시오. 그 후 자동 크기 조정이 작동합니다. 그것이 작동하지 않지만 사실 만, 크기 CGRectMake (0, 0, parentView.frame.size.width, parentView.frame.size.height) 답에 대한

childView.frame = CGRectMake(0, 0, parentView.frame.size.width, parentView.frame.size.height); 
[parentView addSubview:childView]; 
+0

하지만 이것은 자동 크기 조정이 아닙니다. 부모보기에서 나온 복제본입니다. – lojals

+0

그 이유는 "그 후에 자동 크기 조정이 작동합니다." Xcode의 인터페이스 빌더에서 설정하거나 다른 답변에서 설명한대로 설정할 수 있습니다. 하위 뷰에 부모 내에 이상한 지오메트리가 있으면 자동 크기 조정이 이상한 결과를 생성합니다. – cat

관련 문제