이제 Interface Builder를 통해 사용자는 스토리 보드의 모든 뷰 컨트롤러 크기를 동적으로 변경하여 특정 장치의 크기를 시뮬레이션 할 수 있습니다.
이 기능을 사용하기 전에 사용자는 각 뷰 컨트롤러 크기를 수동으로 설정해야합니다. 따라서 뷰 컨트롤러는 initWithCoder
초기 프레임을 설정하는 데 사용되는 특정 크기로 저장되었습니다 .
이제 initWithCoder
스토리 보드에 정의 된 크기를 사용하지 않고 viewcontroller보기 및 모든 하위보기에 대해 1000x1000 px 크기를 정의하는 것 같습니다 .
뷰는 항상 다음 레이아웃 솔루션 중 하나를 사용해야하므로 이는 문제가되지 않습니다.
자동 레이아웃 및 모든 제약 조건이 뷰를 올바르게 레이아웃합니다.
autoresizingMask, 어떤 제약도 연결되지 않은 각 뷰를 레이아웃합니다 ( autolayout 및 margin 제약 조건은 이제 동일한 뷰에서 호환됩니다 \ o /! ).
그러나 이것은 이다 보기 층, 등에 관련된 모든 레이아웃 물건에 대한 문제 cornerRadius
도 있기 때문에, 자동 레이아웃 도 자동 크기 마스크 레이어 속성에 적용됩니다.
이 문제에 답하기 위해 일반적인 방법은 viewDidLayoutSubviews
컨트롤러에 있거나 layoutSubview
뷰에있는 경우 사용하는 것입니다. 이 시점에서 ( super
상대 메서드 를 호출하는 것을 잊지 마세요 ) 모든 레이아웃 작업이 완료되었음을 확신합니다!
예쁜 있는지? 흠 ... 완전히는 아닙니다. 제가이 질문을 한 이유입니다. 어떤 경우에는 뷰가이 방법에서 여전히 1000x1000 크기를 가지고 있습니다. 내 질문에 대한 답이 없다고 생각합니다. 이에 대한 최대 정보를 제공하려면 다음을 수행하십시오.
1- 세포를 배치 할 때만 발생합니다! 에서 UITableViewCell
& UICollectionViewCell
서브 클래스가 layoutSubview
호출되지 않습니다 후 파단이 제대로 밖으로 누워된다.
2- @EugenDimboiu가 언급했듯이 (유용한 경우 답변을 올려주세요) [myView layoutIfNeeded]
레이아웃되지 않은 하위 뷰를 호출 하면 제 시간에 올바르게 레이아웃됩니다.
- (void)layoutSubviews {
[super layoutSubviews];
NSLog (self.myLabel); // 1000x1000 size
[self.myLabel layoutIfNeeded];
NSLog (self.myLabel); // normal size
}
3- 제 생각에는 이것은 확실히 버그입니다. 레이더에 제출했습니다 (id 28562874).
추신 : 저는 영어 원어민이 아니므로 문법을 수정해야하는 경우 게시물을 자유롭게 편집 할 수 있습니다.)
PS2 : 더 나은 해결책이 있다면 다른 답을 쓰지 마십시오. 받아 들인 대답을 이동하겠습니다.