2017-10-10 5 views
0

내 iOS 신속 응용 프로그램에서 가로로 스크롤 가능한 부모 자식 그리드 레이아웃을 만드는 사용자 정의 UICollectionViewLayout으로 UIColletctionViewController를 만들었습니다. 이 레이아웃의 높이는 계산되어 화면 높이에 맞 춥니 다. 축소 컬렉션 모음 추가시 탐색 모음 추가

override var collectionViewContentSize: CGSize { 
    return CGSize(
     width: someWidth, 
     height: collectionView?.frame.height ?? 0 
    ) 
} 

내가 탐색 모음 전체 컬렉션을보기에서 내 컬렉션 뷰 컨트롤러를 포함

는 아래로 이동됩니다하지만 collectionView?.frame.height 같은 그래서 내 콘텐츠가 다운 오버플로 남아있다.

enter image description here

어떻게이의 높이가 네비게이션 바없이 사용 가능한 공간을 감소받을 수 있나요?

+0

보기의 프레임이 변경되면 CollectionView 레이아웃을 무효화하십시오. – IlNero

+0

불행히도 이것은 도움이되지 않습니다. – Peracek

답변

0

나는 실제로 나를 위해 매우 쉬운 해결책을 발견했다. 내 컬렉션보기 컨트롤러의 특성 관리자에서 "맨 아래 막대"옵션의 선택을 취소했습니다.

UICollectionViewController

1

뷰 컨트롤러는 다음 collectionView의 contentInset 탐색 모음의 높이에 대한 보상, 그래서 삽입을 확인하도록 조정됩니다 (의 경우 모양) .all 또는 .topautomaticallyAdjustsScrollViewInsets = trueedgesForExtendedLayout을 설정합니다.

당신의 collectionView가 (탐색 모음 뒤에 시작) 가시 높이 얻을 맨 위로 확장 가정 : 당신이 할 수있는 경우

let visibleHeight = collectionView.frame.height - collectionView.contentInset.top 

을 :

override var collectionViewContentSize: CGSize { 
    return CGSize(
     width: someWidth, 
     height: collectionView.frame.height - collectionView.contentInset.top 
    ) 
} 

또 다른 옵션은 다음 edgesForExtendedLayout = UIRectEdge(rawValue: UInt(0))을 설정하는 것입니다 보기 컨트롤러의보기가 양쪽 가장자리로 확장되지 않고 탐색 모음 아래에서 시작되므로 콜렉션보기의 프레임이 보이는 범위에 있고 사용자의보기에있는 것처럼 collectionViewContentSize을 사용할 수 있습니다.

+0

내'collectionView.contentInset.top'가 0으로 설정되어 작동하지 않습니다. 그러나 'edgesForExtendedLayout = UIRectEdge (rawValue : UInt (0))'를 설정 한이 두 번째 해결 방법이 효과적입니다. 감사! – Peracek

+0

좋아요. 그럼 당신은 대답으로 확인할 수 있습니다 :) –

+0

다른 솔루션에 대한'viewWillAppear' 또는'viewWillLayoutSubviews'에서'collectionView.contentInset.top'을 확인하십시오. 왜냐하면 inset은 아직'viewDidLoad'에서 조정되지 않았기 때문입니다. –