2017-09-30 5 views
3

UIStackView은 수직 레이아웃으로 UIScrollView 안에 있으며 자동 레이아웃을 사용하여 모든 것을 제한합니다. 스크롤 뷰는 수퍼 뷰를 채우고 스택 뷰는 스크롤 뷰를 채우며 스택 뷰에 다양한 요소가 추가됩니다. 이 기능을 자동 레이아웃에서 잘 실행하고 스크롤보기의 내용 크기를 정의하려면 스택보기의 너비도 지정해야합니다. 이것은 스택 뷰에 스크롤 뷰의 폭과 동일한 폭 제약을 추가하여 수행됩니다. 이 시점에서 아무 것도 모호하지 않으며 원하는대로 정확하게 동작합니다.스크롤에서 스택보기 사용하기 안전 영역 인셋보기 및 존중

이제 요소가 화면의 왼쪽 및 오른쪽 가장자리까지 늘어나지 않도록 여백을 추가하려는 경우 스택보기에서 선행 및 후행 제약 조건을 변경하여 양면에 15pt를 삽입 할 수 있습니다 예를 들면. 그러나 등 폭 제약 조건 상수를 반드시 -30으로 변경해야합니다. 스크롤이 가능한 내용을 삽입하면서 화면의 가장 자리를 스 와이프하여 스크롤 할 수 있습니다.

이제 iPhone X가 나타나고 내용이 주택 센서 아래에 있기 때문에 가로 방향으로 15 피트의 여백이 더 이상 충분하지 않습니다. 따라서 안전 영역 레이아웃 여백을 존중하도록 여백을 설정하려면이를 업데이트해야합니다. 당신은 단지 디폴트 마진을 사용하기를 원할뿐입니다. 스택 뷰의 선행 및 후행 제약 조건을 변경하여 뷰의 레이아웃 여백 (안전 영역 인세 트를 고려함)을 사용할 수는 있지만 같은 폭의 제약 조건 상수가 더 이상 여백의 두 배가 아니고 마진이 동적이기 때문에 작동하지 않습니다 지금.

스택 뷰의 앞뒤 및 너비 제약에 대해 IBOutlet을 생성 한 다음 레이아웃 여백이 변경 될 때 프로그래밍 방식으로 조정합니다 (viewLayoutMarginsDidChange). 그러나 인터페이스 빌더에서 작동하는 솔루션 인 코드가 더 필요하지 않은 더 좋은 방법이 있는지 궁금합니다.

+0

내 iPhone X 스토리 보드에 대해 "이 제약 조건을 사용하고 다른 하나를 추가하거나이 상수를 변경하는"좋은 방법을 찾지 못했습니다. 올바른 생각을 가지고 있다고 생각합니다. 콘센트를 추가하고 이에 따라 상수를 조정하십시오. 그래도 약간의 buzzkill. – cbowns

답변

1

전적으로 Interface Builder에서이 작업을 수행 할 수있는 방법을 찾았습니다. 스크롤 뷰 내에 스택 뷰를 직접 포함하는 대신 스크롤 뷰 내부에 UIView을 콘텐츠 뷰로 추가하십시오. 0의 상수를 가진 수퍼 뷰와 동일한 모든 선행, 후행, 위쪽 및 아래쪽 제약 조건을 만들고 스크롤 뷰와 동일한 너비 제약 조건을 추가합니다. 그런 다음 스택 뷰를이 컨텐츠 뷰에 ​​포함시킵니다. 수퍼 뷰의 마진 ¹에 상단 및 하단을 더한 스택보기에 대한 선행 및 후행 제약 조건을 생성합니다.

- view 
-- scroll view 
--- view 
---- stack view 

이 왼쪽과 오른쪽 가장자리에서 스크롤 할 수 있습니다 풍경에 아이폰 X에 보장합니다는, 스크롤 막대가 화면의 오른쪽 가장자리에 배치되고, :

그래서 당신의 설정이 될 것입니다 스택보기가 안전 영역 내에 배치됩니다.

¹ 상수에 대해 느끼기에 충분한 여백을 추가하여 상수 8을 발견했습니다.

+0

Up-up-up 투표. 저의 유일한 추가 사항은 그러한 여백이 안전 영역과 관련이 있는지 확인하는 것입니다. – keeshux