iOS 에서 UIView 의 layoutSubviews 하위 보기 레이아웃 방법 을 자세히 설명 합 니 다.
UIView 에 layout Subviews 방법 이 있 습 니 다.
- (void)layoutSubviews; // override point. called by layoutIfNeeded automatically. As of iOS 6.0, when constraints-based layout is used the base implementation applies the constraints-based layout, otherwise it does nothing.
layoutSubviews 방법의 구체 적 인 역할layoutSubviews 는 subviews 를 다시 배치 합 니 다.예 를 들 어 우리 가 하위 보기 의 위 치 를 업데이트 하고 싶 을 때 layoutSubviews 방법 을 호출 하면 하위 보기 의 재 구성 도 실현 할 수 있 습 니 다.
layoutSubviews 는 기본적으로 아무것도 하지 않 습 니 다.사용 할 때 천둥 에서 다시 써 야 합 니 다.
실례
아이 패드 의 가로 세로 화면 이 다 르 기 때문에 좋 은 응용,가로 세로 화면의 페이지 레이아웃 도 다르다.그렇다면 가로 세로 화면의 전체적인 해결 방안 이 필요 하 다.먼저 가로 세로 화면 레이아웃 이 다른 화면 을 보 세 요.
아래 두 장의 그림 은 같은 인터페이스의 가로 세로 판 캡 처 이다.가로 세로 판 에 표 시 된 내용 은 같 지만 인터페이스 레이아웃 은 다르다 는 것 을 알 수 있다.위 레이아웃 을 구현 하려 면 주로 UIView 의 layoutSubviews 방법 을 사용 합 니 다.UIView 가 자동 으로 화면 에 맞 게 설정 되 었 을 때 사용자 가 장 치 를 회전 할 때 layoutSubviews 방법 을 사용 합 니 다.이 방법 을 다시 쓰 고 사용자 화면의 방향 을 판단 합 니 다.각 공간의 위 치 를 조정 하면 됩 니 다.
다음은 상기 인터페이스 를 실현 하 는 가장 간단 한 원형 이다.
먼저 분석 하면 왼쪽 은 그림 이 고 오른쪽 은 그림 에 문 자 를 넣 은 보기 임 을 알 수 있다.왼쪽 보기 오른쪽 은 그림 에 한 자 를 더 한 사례 다.
사례 의 캡 처 는 다음 과 같다.
그 중에서 오른쪽 에 있 는 문자 와 녹색 부분 은 하나의 보기 로 봉 해 져 있다.
전체 레이아웃 은 제 가 메 인 보기에 ContentView 보 기 를 추 가 했 고 ContentView 보기에 ArticleView 보 기 를 추 가 했 습 니 다.
그 중에서 ArticleView 와 ContentView 의 xib 파일 이 모두 열 렸 습 니 다.
ContentView 에서 layoutSubviews 방법 을 다시 쓴 다음 stausbar 방향 에 따라 현재 보기 의 가로 세로 화면 을 판단 합 니 다.구체 적 인 코드:
-(void)layoutSubviews{
[super layoutSubviews];
UIDeviceOrientation interfaceOrientation=[[UIApplication sharedApplication] statusBarOrientation];
if (interfaceOrientation == UIDeviceOrientationPortrait || interfaceOrientation == UIDeviceOrientationPortraitUpsideDown) {
//
[self setVerticalFrame];
}else if (interfaceOrientation==UIDeviceOrientationLandscapeLeft || interfaceOrientation == UIDeviceOrientationLandscapeRight) {
//
[self setHorizontalFrame];
}
}
-(void)setVerticalFrame
{
NSLog(@" ");
[titleLable setFrame:CGRectMake(283, 0, 239, 83)];
[leftView setFrame:CGRectMake(38, 102, 384, 272)];
[rightView setFrame:CGRectMake(450, 102, 282, 198)];
}
-(void)setHorizontalFrame
{
NSLog(@" ");
[titleLable setFrame:CGRectMake(183, 0, 239, 83)];
[leftView setFrame:CGRectMake(168, 122, 384, 272)];
[rightView setFrame:CGRectMake(650, 122, 282, 198)];
}
구체 적 인 가로 세로 화면 방법 에 서 는 각 구성 요소 의 좌 표를 새로 설정 하면 된다.다음은 ContentView 에 ArticleView 보 기 를 추가 합 니 다.
-(id)initWithCoder:(NSCoder *)aDecoder
{
if ((self = [super initWithCoder:aDecoder])) {
NSArray *arrayContentView =[[NSBundle mainBundle] loadNibNamed:@"ArticleView" owner:self options:nil];
rightView=[arrayContentView objectAtIndex:0];
[self addSubview:rightView];
}
return self;
}
xib 를 사용 하기 때문에 initWithCoder 로 초기 화 하 는 방법 입 니 다.여기에 새로운 보 기 를 추가 합 니 다.마찬가지 로 ArticleView 에 가로 세로 화면의 해당 공간의 좌 표를 설정 하면 된다.
-(void)layoutSubviews{
[super layoutSubviews];
UIDeviceOrientation interfaceOrientation=[[UIApplication sharedApplication] statusBarOrientation];
CGRect rect=self.frame;
rect.size.width=282;
rect.size.height=198;
[self setFrame:rect];
if (interfaceOrientation == UIDeviceOrientationPortrait || interfaceOrientation == UIDeviceOrientationPortraitUpsideDown) {
//
[self setVerticalFrame];
}else if (interfaceOrientation==UIDeviceOrientationLandscapeLeft || interfaceOrientation == UIDeviceOrientationLandscapeRight) {
//
[self setHorizontalFrame];
}
}
-(void)setVerticalFrame
{
NSLog(@" ");
[contentView setFrame:CGRectMake(12, 6, 250, 125)];
[textLable setFrame:CGRectMake(50, 139, 182, 39)];
}
-(void)setHorizontalFrame
{
NSLog(@" ");
[contentView setFrame:CGRectMake(12, 6, 106, 158)];
[textLable setFrame:CGRectMake(135, 11, 147, 39)];
}
총결산layoutSubviews 아래 상황 이 호출 됩 니 다:
애플 공식 문 서 는 layoutSubviews 를 직접 호출 하여 하위 보 기 를 재 구성 할 수 없다 고 강조 했다.그럼,layoutSubviews 는 어떤 상황 에서 호출 됩 니까?바 이 두 검색 을 통 해 다음 과 같은 몇 가지 상황 을 알 수 있 습 니 다.layout Subviews 가 호출 됩 니 다.
view 의 fram 값 이 0 일 때'addSubview'도'layoutSubviews'를 호출 하지 않 습 니 다.
layoutSubviews 방법 은 천둥 보 기 를 배치 할 때 매우 편리 합 니 다.레이아웃 Subviews 의 호출 메커니즘 을 깊이 이해 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.