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

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 가지 시나리오가 맞습니까? 지금 이해하고 있습니까?



답변

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


답변

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

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

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

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

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

myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;

대신에

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

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


답변

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

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

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

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


답변

스위프트 4
사용

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

목표 -C

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


답변