동료 개발자, Interface Builder (Xcode 5 / iOS 7)의 AutoLayout에 문제가 있습니다. 매우 기본적이고 중요하므로 모든 사람들이 이것이 어떻게 작동하는지 알아야한다고 생각합니다. 이것이 Xcode의 버그 인 경우 중요한 버그입니다!
따라서 이와 같은 뷰 계층 구조가있을 때마다 문제가 발생합니다.
>UIViewController
>> UIView
>>>UIScrollView
>>>>UILabel (or any other comparable UIKit Element)
UIScrollView는 모든면에서 50 픽셀 (예 : 문제 없음)과 같은 견고한 제약 조건이 있습니다. 그런 다음 UILabel에 Top Space 제약 조건을 추가합니다 (문제 없음) (심지어 레이블의 높이 / 너비를 고정하고 아무것도 변경할 수는 없지만 레이블의 고유 크기로 인해 불필요해야합니다)
UILabel에 후행 제한 조건을 추가하면 문제점이 시작됩니다.
예 : 후행 공간 : Superview 같음 : 25
이제 두 가지 경고가 발생하며 이유를 이해하지 못합니다.
A) 스크롤 가능한 컨텐츠 크기 모호성 (스크롤보기에는 스크롤 가능한 컨텐츠 높이 / 너비가 모호함)
B) 잘못된 뷰 (라벨 예상 : x = -67 실제 : x = 207
나는 당신이 다운로드 할 수있는 갓 새로운 프로젝트 에서이 최소한의 예를했고 스크린 샷을 첨부했습니다. 보다시피 Interface Builder는 Label이 UIScrollView의 경계 (주황색 점선 사각형) 밖에있을 것으로 예상합니다. 문제 해결 도구를 사용하여 레이블의 프레임을 업데이트하면 바로 프레임이 이동합니다.
참고 : UIScrollView를 UIView로 바꾸면 예상대로 동작합니다 (레이블의 프레임이 정확하고 제약 조건에 따름). 따라서 UIScrollView에 문제가 있거나 중요한 것이 빠져 있습니다.
IB가 제안한대로 Label의 프레임을 업데이트하지 않고 앱을 실행하면 정확히 위치해야하며 UIScrollView는 스크롤 가능합니다. 프레임을 업데이트하면 Label이 보이지 않고 UIScrollView가 스크롤되지 않습니다.
오비완 케노비 도와주세요! 왜 모호한 레이아웃입니까? 왜 위치가 잘못 되었나요?
https://github.com/Wirsing84/AutoLayoutProblem : 여기에서 샘플 프로젝트를 다운로드하고 진행 상황을 알아낼 수 있는지 시도 하십시오.
UIScrollView
직접 사용하지 않습니다 . 대신 UICollectionView
또는 UITableView
최대한 많이 사용하십시오. 대부분 모든 것은이 요소로 가능하며 단순성, 가독성 및 재사용 성을 제공합니다!