iOS 응용 개발 에서 autoresizing 사이즈 가 자동 으로 속성 에 적응 하 는 용법 을 자세히 설명 합 니 다.
8482 단어 iOSautoresizing
0.autoresizing 사용 전 설명:
UIView Autoresizing 은 매 거 진 형식 입 니 다.기본 값 은 UIView Autoresizing None 입 니 다.즉,어떠한 처리 도 하지 않 습 니 다.
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleRightMargin = 1 << 2,
UIViewAutoresizingFlexibleTopMargin = 1 << 3,
UIViewAutoresizingFlexibleHeight = 1 << 4,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
각 속성 설명:Storyboard/Xib 를 자주 사용 하여 autoresizing 을 설정 하면 코드 설정 autoresizing 을 바 꾸 면 잘못된 문 제 를 이해 하기 쉽다 는 것 을 설명 합 니 다.예 를 들 어 UIView Autoresizing Flexible TopMargin 은 상단 거리 가 변 하지 않 는 다 고 오 해 를 받 을 수 있 지만 사실은 바닥 거리 가 변 하지 않 는 다.이 해결 방법 도 간단 합 니 다.코드 를 사용 하 는 것 과 Storyboard 를 사용 하 는 것 을 autoresizing 으로 설정 하 는 것 이 반대 입 니 다.이렇게 기억 하면 됩 니 다.
autoresizing 조합 사용:
즉,매 거 진 값 은|격 리 를 사용 할 수 있 고 여러 값 의 기능 을 가지 기 때문에 서로 다른 장면 에 대해 서로 다른 변 화 를 할 수 있다.예 를 들 면:
UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin
view 의 너 비 는 부모 보기 의 너비 비율 에 따라 크기 를 조정 하고 부모 보기 의 상단 거리 에서 변 하지 않 습 니 다.
다른 조합 은 비슷 하 니 일일이 열거 하지 않 겠 습 니 다.
주의:
1)view 의 autoresizes Subviews 속성 이 yes 일 때(기본 값 yes)autoresizing 이 적 용 됩 니 다.
2)XCODE 6 부터 Storyboard&Xib 는 기본적으로 자동 레이아웃 이기 때문에 수 동 으로 조정 해 야 autoresizing 을 사용 할 수 있 습 니 다.
그림 과 같이 구체 적 인 조작(Storyboard 파일 을 열 면 아래 그림 의 화면 을 볼 수 있 습 니 다):
다음은 간단 한 예 를 써 서 여러분 에 게 더욱 직관 적 인 이 해 를 드 리 고 본문 마지막 에 데모 다운로드 주 소 를 첨부 할 것 입 니 다.계속 아래 를 보 세 요.
Demo:
1)상단 거리 부모 보기 거리 가 변 하지 않 음
2)폭 을 부모 보기 비율 로 늘 리 기
3)view 와 부모 보기 의 왼쪽 거리 와 오른쪽 거 리 는 변 하지 않 습 니 다.
1.사용 코드(코드)제어 autoresizingMask
다음은 프로젝트 에 사용 되 는 매크로 입 니 다:
#define topSpace 64
#define kMargin 20
#define kTopViewHeight 44
#define kTopViewWidth 300
#define kTextLabelWidth 200
#define kTextLabelHeight 30
적합 한 코드 를 만 들 지 않 았 습 니 다:
// Iphone4(320, 480) ,
// : Iphone4(320, 480) , !
UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(kMargin, topSpace, kTopViewWidth, kTopViewHeight)];
CGFloat textLabelTop = (topView.frame.size.width - kTextLabelWidth) / 2;
CGFloat textLabelWidth = (topView.frame.size.height - kTextLabelHeight) / 2;
UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(textLabelTop, textLabelWidth, kTextLabelWidth, kTextLabelHeight)];
//
[textLabel setText:@"Garvey"];
[textLabel setTextAlignment:NSTextAlignmentCenter];
//
[topView setBackgroundColor:[UIColor redColor]];
[textLabel setTextColor:[UIColor whiteColor]];//
[topView addSubview:textLabel];
[self.view addSubview:topView];
다음 과 같이 표 시 됩 니 다:autoresizing 을 사용 하여 인터페이스 적합:
보충:다른 장치 크기 를 인터페이스 에 있 는 컨트롤 로 초기 화 할 수 있 습 니 다.autoresizing 은 부모 보기 의 변화 로 변 하기 때 문 입 니 다.
// Iphone4(320, 480) ,
// : Iphone4(320, 480) , !
UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(kMargin, kTopSpace, kTopViewWidth, kTopViewHeight)];
CGFloat textLabelTop = (topView.frame.size.width - kTextLabelWidth) / 2;
CGFloat textLabelWidth = (topView.frame.size.height - kTextLabelHeight) / 2;
UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(textLabelTop, textLabelWidth, kTextLabelWidth, kTextLabelHeight)];
//
[textLabel setText:@"Garvey"];
[textLabel setTextAlignment:NSTextAlignmentCenter];
//
[topView setBackgroundColor:[UIColor redColor]];
[textLabel setTextColor:[UIColor whiteColor]];
// (topView)
[textLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
// View , 、
[topView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin];
//
[topView addSubview:textLabel];
[self.view addSubview:topView];
// : topView , , autoresizing !
CGFloat topViewWidth = kUIScreen.size.width - kMargin * 2;
[topView setFrame:CGRectMake(kMargin, kTopSpace, topViewWidth, kTopViewHeight)];
마지막 표시:2.Storyboard 에서 autoresizing Mask 제어
autoresizing Mask 는 story board 에서 이 루어 지 든 코드 로 이 루어 지 든 본질 적 으로 6 개의 선 이다.
storyboard 에서 autoresizing Mask 를 사용 하려 면 Autolayot 를 사용 하지 않 아야 합 니 다.
그림:
그림 에는 모두 여섯 개의 선(상하 좌우 에서 외곽 까지 의 거리 선과 내부 의 두 개의 선)이 있다.
상하 좌우 선 중 하 나 를 선택 하면 부모 컨트롤 의 경계 거리 가 변 하지 않 음 을 나타 낸다.
예 를 들 어 그림 에서 왼쪽 과 위의 선 을 선택 하면 파란색 view 거리 self.view 의 왼쪽 경계 와 위의 경계 거리 가 변 하지 않 음 을 나타 낸다.
상하 좌우 선 을 동시에 선택 하면 행동 은 왼쪽 선 을 선택 한 것 과 같 습 니 다.즉,기본 행동 입 니 다.
하위 컨트롤 크기 가 부모 컨트롤 크기 에 따라 바 뀌 려 면 내부 의 두 선 을 사용 해 야 합 니 다.내부 의 선 은 컨트롤 이 수평 과 수직 방향 에서 늘 어 날 수 있 도록 허용 한 다 는 것 을 나타 낸다.내부 선 이 선택 되 지 않 으 면 컨트롤 이 늘 어 나 는 것,즉 고정 크기 를 원 하지 않 는 다 는 뜻 이다.
즉,주위 의 선 은 고정 거 리 를 나타 내 고 내부 의 선 은 스 트 레 칭 을 허용 한 다 는 뜻 이다.
코드 로 autoresizingMask 를 설정 하면 view 의 autoresizingMask 속성 이 매 거 진 것 을 발견 할 수 있 습 니 다.
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleRightMargin = 1 << 2,
UIViewAutoresizingFlexibleTopMargin = 1 << 3,
UIViewAutoresizingFlexibleHeight = 1 << 4,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5
첫 번 째 는 None 을 제외 하고 나머지 여섯 개 는 story board 의 여섯 개의 선 에 대응 합 니 다.위 에 조심 하 세 요.
UIViewAutoresizingFlexibleWidth
UIViewAutoresizingFlexibleHeight
이것 은 storyboard 에 autoresizing Mask 를 설치 한 내부 의 두 안테나 와 일치 합 니 다.늘 어 날 수 있 는 너비 와 높이 입 니 다.나머지 는 주의해 야 한다.
UIViewAutoresizingFlexibleLeftMargin
UIViewAutoresizingFlexibleRightMargin
UIViewAutoresizingFlexibleTopMargin
UIViewAutoresizingFlexibleBottomMargin
story board 에서 주변 선 을 선택 하면 거리 가 고정 되 어 있 음 을 표시 합 니 다.예 를 들 어 저 는 왼쪽 선 을 선 택 했 습 니 다.그러면 왼쪽 거 리 를 고정 시 키 고 싶다 는 뜻 입 니 다.그래서 코드 에서 UIView Autoresizing FlexibleRightMargin 을 선택해 야 합 니 다.즉,오른쪽 거리 가 고정 되 지 않 았 다 는 뜻 입 니 다.그러면 기본 왼쪽 거 리 는 고정 되 어 있 습 니 다.autoresizingMask 의 단점 은 부모 컨트롤 과 하위 컨트롤 간 의 관계 만 보장 할 수 있 고 동급 컨트롤 간 의 관 계 를 보장 할 수 없다 는 것 이다.즉,일부 수요 가 있 기 때문에 autoresizingMask 는 실현 할 수 없다.더 많은 정력 을 Autolayot 에 두 어야 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.