2014-12-06 2 views
4

UIScrollView를 사용할 때 이상한 AutoLayout 관련 문제가 발생합니다 (문제가 발생하지 않는 경우).UIScrollView "잘못 배치 된 뷰"발생 AutoLayout 문제

UIView (UIViewController 내에 포함 된)의 경계에 제약이있는 UIScrollView가 있는데 그 안에 UILabel과 UITextField를 나란히 배치하려고 시도하고 있습니다. 이 제한 폭과 높이의와 나는 왼쪽 상부 경계에 UILabel의 구속했다 (아래 스크린 샷 참조)

Properly functioning constraints for the UILabel

을 바로 옆이 UILabel의에 왼쪽 상단에 구속 된 UITextField에있다 , 그리고 오른쪽뿐만 아니라, 높이 제한이 있습니다. 나는 "제안 제약으로 초기화를 선택하면

UITextField constraints causing Misplaced Views issue

: 그러나,이 아래의 스크린 샷에 표시된"예상 폭 = 163, 실제 폭 = 413 "을 알리는"잘못 배치 된 뷰 "경고, 결과 ","잘못 배치 된 뷰 "문제는 사라지지만, 413 포인트의 너비 제한이 남아 있습니다.이 UIViewController를 작은 장치에서 가로로 스크롤 할 수 없으므로 피하려고합니다.

답변

9

스크롤보기에는 크기 (화면에서 차지하는 크기)와 내용 크기 (전체 화면 이동 가능 영역의 크기)가 있습니다. 자동 레이아웃에서는 스크롤보기의 항목 제약 조건에 따라 콘텐츠 크기가 자동으로 계산됩니다. 스크롤보기가 화면 너비와 동일하게 만들고 그 다음에 항목을 제한하려고하기 때문에 이것은 문제입니다. 이렇게하면 자동 레이아웃은 텍스트 필드에 명시적인 너비를 지정하여 스크롤 가능한 영역의 너비를 계산할 수 있다고 주장합니다.

는 다음을 수행합니다, 당신이 원하는 것을 수행합니다

  1. 는 스크롤 뷰에 "내용보기"를 추가합니다. 이보기는 스크롤보기의 최상위 항목입니다. 모든 콘텐츠를 하위 뷰로 유지합니다. UIView을 드래그하여 스크롤보기에 추가하십시오. 위쪽, 아래쪽 및 아래쪽 가장자리를 스크롤 뷰에 구속합니다. 폭을 스크롤 뷰의 폭으로 제한합니다. 높이 제약 조건을 설정하고 콘텐츠 영역을 크게 설정하십시오.

  2. 모든 콘텐츠 라벨과 텍스트 필드를이 콘텐츠보기에 추가하십시오. 이제 콘텐츠를 콘텐츠보기의 중심에 배치하거나 가장자리에 구속 할 수 있으며 원하는대로 작동합니다.