2011-10-08 9 views
4

내가 가지고 UIViewControllerwillRotateToInterfaceOrientation에, 내가 [self view] setNeedsLayout];setNeedsLayout UIView의 서브 뷰

이보기 전화의 그것의 하위 뷰의 (A UIScrollView) layoutSubviews 메소드를 호출하고 있지만,이 파단의의 UIScrollViewlayoutSubviews를 호출하지 않습니다. 이게 어때? 난 당신이보기에 setNeedsLayout를 호출하는 경우, 그것은 각 layoutSubviews 모든 subivew과 파단과에를 ... 호출 생각

내가 수동으로 UIScrollViewlayoutsubview을 무시하고 서브 뷰의 각 setNeedsDisplay를 호출해야합니까?

감사합니다.

답변

5

내 앱에서 이전에 똑같은 것을 관찰했는데 setNeedsLayout은보기의 하위보기에만 영향을 미치고 아래로 이동하지 않는 것 같습니다. 사용자 정의보기를 사용하는 경우보기를 쉽게 하위 클래스로 만들고 setNeedsLayout의 하위보기를 반복하고 명시적인 setNeedsLayout을 수행 할 수 있습니다.

기본 동작으로 사용하려면 범주의 메서드를 재정의 할 수 있지만 모든 뷰에 영향을 미치고 성능 및 기타 예기치 않은 문제가 발생할 수 있으므로 실제로는 수행하지 않습니다.

당신은 Thanks..I 내가 그렇게하지 않았다 기대했다

+0

을 테스트하지, 브라우저에 입력이

@interface UIView (Layout) - (void)setNeedsLayoutRecursively; @end @implementation UIView (Layout) - (void)setNeedsLayoutRecursively { for (UIView *view in self.subviews) { [view setNeedsLayoutRecursively]; } [self setNeedsLayout]; } @end 

처럼 뭔가를 할 수,이를 방지하고 싶었다. 깊은 뷰 계층 구조를 가지고 있기 때문에 실제로 많은 UIView를 하위 뷰로 만들고 싶지는 않습니다. 어쨌든, 도와 주셔서 감사합니다. – 0xSina

+0

우수한 작은 선택 - 내 문제를 완벽하게 해결할 코드 렛. 고맙습니다! –

+0

그러나 자식 뷰는 부모의 상태에 대해 걱정할 필요가 없습니다. 자식 뷰의 범위가 변경된 경우에만 자식을 다시 레이아웃해야합니다. 부모의 layoutSubviews (또는 autoresize masks)가 자식의 크기를 변경하면이 문제가 발생할 수 있습니다. 이 경우 layoutSubviews가 뷰 계층 구조로 전파됩니다. –

관련 문제