프로그래밍 방식으로 마스크 자동 크기 조정 인터페이스 vs. 인터페이스 빌더 / xib / nib


216

xib에서 올바른 여백 표시기를 활성화하는 것은 UIViewAutoresizingFlexibleLeftMargin내부 코드 등 을 사용하는 것과 같습니다 .

그래서 나는이 스냅 샷에 따라 생각했습니다. 여기에 이미지 설명을 입력하십시오

나중에 오늘 나는 교차 점검을해야했고이 실에 걸려 넘어 졌다.

또한이 링크에서 제목- "자동 크기 조정 규칙을 사용하여 자동으로 레이아웃 변경 처리"섹션이있는 Apple 설명서 : https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/ CreatingViews.html

이제 자동 크기 조정 마스크를 프로그래밍 방식으로 설정하는 것이 xib 설정과 어떻게 다른지에 대한 개념이 새롭게 바뀌 었습니다.

시나리오 1 : 설정 만 (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight):

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)

XIB에서?

시나리오 2 : (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)코드 설정 은 다음과 같습니다.

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)

XIB에서?

갱신 된 2 가지 시나리오가 맞습니까? 지금 이해하고 있습니까?


3
지금 농담하니? 그러나 내 혼란도있는 것처럼 보입니다. 맨 위로 포옹하려면 하단 자동 크기 조정을 켭니다. 잘 했어. 이것은 내가 본 것 중 가장 바보 같은 설정입니다.
user4951

1
맨 위로 포옹하려면 비트 마스크 코드에서 UIViewAutoresizingFlexibleTopMargin을 언급하지 않아야합니다. 내 이전 가정은 잘못되었으므로 그 질문을 정리하기 위해이 질문을 게시했습니다.
Raj Pawan Gumdal 8

당신의 가정은 맞습니다. 어디가 틀렸어?
user4951

네, 인용 한 두 가지 시나리오가 맞습니다.

3
erkanyildiz.me/lab/autoresizingmask 를 위한 간단한 도구를 만들었 습니다.
erkanyildiz

답변:


35

예, Interface Builder는 어떤 의미에서 (또는 UIView의 관점에 따라) "반전"되어 있습니다. 인용 한 "시나리오"가 맞습니다.


47

예, 당신은 물건을 올바르게 인용했습니다. 또한, 나는 약간 거꾸로 느낀다는 데 동의하므로 그런 이유로 귀하의 게시물에 감사드립니다.

UIViewAutoresizingFlexibleMarginsUIView의 여백을 모든 방향으로 유연하게 만들 때 전 처리기 매크로를 사용하는 것이 좋습니다. 미리 컴파일 된 헤더 파일에 넣었으므로 어디에나 포함됩니다.

#define UIViewAutoresizingFlexibleMargins                 \
              UIViewAutoresizingFlexibleBottomMargin    | \
              UIViewAutoresizingFlexibleLeftMargin      | \
              UIViewAutoresizingFlexibleRightMargin     | \
              UIViewAutoresizingFlexibleTopMargin

를 사용 UIViewAutoresizingFlexibleMargins하면 UI 요소가 한쪽을 껴 안지 않기 때문에 중앙에 유지됩니다. 요소 성장한다하려면 / 설정된 부모로 축소 UIViewAutoresizingFlexibleWidth하고 UIViewAutoresizingFlexibleHeight각각.

UIViewAutoresizingFlexibleMargins나중에 다음과 같이 참조 할 수 있기 때문에 사용 하는 것이 좋습니다.

myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;

대신에

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;

나는 종종 이러한 여백을 위의 예와 같이 한 줄로 모아 보았습니다. 읽기 힘들어요


4
모든 방향에서 유연해야합니다 (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight) 같아요? 아니면 다시 혼란스러워!
Raj Pawan Gumdal 5

4
FlexibleMargins는 요소를 중앙에 유지합니다 (왼쪽, 위쪽, 오른쪽 또는 아래쪽 여백을 껴 안지 않음). 유연한 너비 / 높이는 UI 요소를 각각 늘리거나 줄입니다.
Sam

4
이제 모든 것이 명확합니까? 또한, 나는 당신의 게시물에 감사한다고 말했을 때 정말로 그것을 의미했습니다. 나는 이것이 과거에 나를 혼란스럽게 한 것을 좋아했습니다. 좋은 질문이라고 생각합니다.
Sam

3
네, 감사합니다. 이제 "유연한 여백"과 "유연한 너비 / 높이"를 얻습니다. 즉, 모든 설명하고 "는 왼쪽, 위쪽, 오른쪽 또는 아래쪽 여백을 포옹하지 않는 것은":) 설명하는 좋은 방법입니다
라즈 Pawan Gumdal

0

여기에 이미지 설명을 입력하십시오

상자 안에서 세로 / 가로 화살표 (스프링이라고 함)를 활성화하면 높이 / 폭이 유연 해집니다. 그러나 외부 라인 (스트럿이라고 함) 을 활성화하면 해당면이 유연하지 않거나 유연하지 않게됩니다.

바깥 쪽 왼쪽 라인 (왼쪽 스트럿) 을 활성화하는 것은 enabled 과 동일하지 않습니다 UIViewAutoresizingFlexibleRightMargin. 대신, 오른쪽 스트럿이 비활성화 경우 UIViewAutoresizingFlexibleRightMargin= , 오른쪽 스트럿이 활성화 된 경우 off 입니다.

처음에는 상당히 혼란 스럽지만 자세히 보면 스프링과 스트럿에 차이가 있습니다. Apple이 왜 그렇게했는지 모르겠지만 사용하기 쉬운 경우가있었습니다. 그리고 코드에서 반대 속성을 사용하는 것이 훨씬 더 혼란스러워집니다.


0

스위프트 4 사용

gadBannerView?.autoresizingMask = [.flexibleRightMargin  , .flexibleLeftMargin , .flexibleTopMargin , .flexibleBottomMargin]

목표 -C

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.