2017-09-29 12 views
2

내 앱에서보기 컨트롤러를 모달로 표시하고이보기 컨트롤러에 수퍼 뷰를 채우는 UICollectionView이 포함되어 있습니다. 콜렉션 뷰의 각 셀은 뷰의 경계와 동일한 크기의 전체 화면이어야합니다. 이를 달성하기 위해 간단히 UICollectionViewFlowLayoutitemSize을보기의 바운드 크기 (viewDidLayoutSubviews)로 설정합니다.프리젠 테이션의 iPhone X에서 전체 화면 UICollectionViewCell 문제

이것은 풍경의 iPhone X를 제외한 모든 기기 및 방향에서 정말 잘 작동합니다. 이 경우 화면을 표시 할 때 안전 영역 레이아웃 여백이 나타나서 셀의 위치에 영향을주는 것으로 보입니다. 셀이 디스플레이의 왼쪽 가장자리에서 밀려 올라가고 셀의 아래쪽이 홈 인디케이터의 수직 중앙에 정렬되도록 밀어 올립니다. 뷰 디버거를 사용하여 레이아웃을 검사하면 컬렉션 뷰가 화면을 채우지 만 콜렉션 뷰의 맨 앞에서 삽입되어 있더라도 셀의 Y 위치는 -10.67이고 X 위치는 0입니다. 특히, 콘솔에 기록됩니다.

The behavior of the UICollectionViewFlowLayout is not defined because: 
the item height must be less than the height of the UICollectionView minus the section insets top and bottom values, minus the content insets top and bottom values. 
The relevant UICollectionViewFlowLayout instance is <UICollectionViewFlowLayout: 0x7fa6311253b0>, and it is attached to <UICollectionView: 0x7fa63207e800; frame = (0 0; 812 375); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x608000244d70>; layer = <CALayer: 0x60800023ef00>; contentOffset: {-44, 0}; contentSize: {0, 812}; adjustedContentInset: {0, 44, 21, 44}> collection view layout: <UICollectionViewFlowLayout: 0x7fa6311253b0>. 

여기에 무슨 일이 일어나고 있으며 어떻게 해결 될 수 있습니까?

+0

그냥 궁금해서, 왜'collectionView의 내부 itemSize를 설정하지 (: 레이아웃 : sizeForItemAt : _)'대신'viewDidLayoutSubviews'의? – damiancesar

+0

또한 itemSize를 처음 언급 한대로 설정하면'view.bounds'와는 반대로 width와 height에'view.frame'을 사용해야합니다. – damiancesar

답변

8

기본적으로 iOS 11은 iPhone X의 콘텐츠 삽입물을 가로 방향으로 자동 조정하므로이 문제가 발생합니다. 이 문제를 해결하려면이 시나리오에서 필요하지 않거나 바람직하지 않은 자동 콘텐츠 삽입 조정을 사용 중지하기 만하면됩니다.

collectionView.contentInsetAdjustmentBehavior = .never

+0

완벽하게 일했습니다! 이 설정을 해제하려면'UICollectionViewFlowLayoutSectionInsetReference'를 사용하려고했으나 이것 이외의 다른 일을하는 것처럼 보였습니다. – sahandnayebaziz

+1

안녕하세요,이 동작을 didSet observer의 콜렉션에 추가했고'return self.view.frame.size'처럼'collectionView (_ : layout : sizeForItemAt :)'에서 셀 크기를 설정하고 있습니다. 여전히 아이폰 엑스에 대한 풍경에만 문제가 있습니다. 제가 확인해야 할 다른 것이 있습니까? – Jose