세 개의 UICollectionViews
이 포함 된 스택보기가 있는데 각보기에 동일한 세로 공간이 있도록 설정되어 있습니다. 이 스택보기는 디스플레이의 절반 높이로 설정되어 더 큰 장치에서 더 많은 공간을 사용합니다. 이것은 Interface Builder에서 설정되었습니다.런타임시 UICollectionViewCellSize 설정
우리는 실행될 때까지 셀의 실제 크기를 알지 못하기 때문에 실행시 UICollectionView
의 셀 크기를 설정해야합니다. 나는 그것들을 정사각형으로 만들고 싶기 때문에, 단지 UICollectionView
의 높이를 고려하고, 상단과 하단 섹션 인셋을 뺀 다음, itemSize
을 결과 크기로 설정하고 싶습니다.
viewDidLayoutSubviews
에서이 작업을 시도합니다. 그때까지 컬렉션보기의 초기 높이가 설정 되었기 때문입니다. 그러나 (스토리 보드에서 훨씬 더 합리적인 크기 임에도 불구하고) 1000x1000으로 설정되어 있으므로 컬렉션보기 높이가 1000 인 셀 크기를 계산합니다.이 값은 너무 큽니다. 다시 전화를 걸면 다시 계산할 기회가 생깁니다. 그리고 내가 할 수 있지만 UICollectionView
전에 itemSize
가 잘못이라고 큰 소리로 불평 (예. 지금 "올바른"크기를 가지고 collectionView
에 맞게. 너무 큰)
행동 I를 얻을 수있는 가장 좋은 방법은 무엇입니까 UICollectionView
에서 경고없이 찾고 있어요? UICollectionView
의 최종 크기를 기반으로 런타임시 컬렉션보기 항목 크기를 설정하면 과거에 어려움을 겪은 적이 있으며 itemSize
을 설정하는 데 "올바른"시간이없는 것 같습니다. 프로그램의 수명 기간 동안 변경되는 것이 아니기 때문에 동적으로 반환하고 싶지 않습니다. 처음에는 전망을 배치 할 때 약간의 불일치가있는 것 같습니다.
콜렉션보기가 초기 크기 1000.0 x 1000.0으로 제공된다는 것은 이상한 것처럼 보입니다.하지만이를 수정하는 방법이나 이유는 무엇인지 모르겠습니다. 스택보기에 포함 된 것과 관련이 있습니다. ?
편집자 :UIStackView
이 레이아웃 문제를 일으키는 것은 거의 확실합니다. 난 UICollectionView
의 크기를 테스트하기 위해 더미 프로젝트를 만들었는데, 최상위 레벨 뷰일 때 UIStackView
에 임베디드된다. 포함되지 않은 경우 viewDidLayoutSubviews
이 호출되면 superview
의 경계에 맞게 크기가 적절하게 조정됩니다. 그러나 내부에있는 경우 UIStackView
, 기본 크기는 1000x1000 유지됩니다.
viewDidLayoutSubviews
에 다음 코드를 추가하여이 문제를 해결하고 있어요 :
collectionView
이
UIStackView
및
view
안에
if collectionView.bounds.size.width > view.bounds.size.width { view.layoutIfNeeded() }
는 UIViewController
의 기본보기입니다. 이렇게하면 뷰의 크기를 기반으로하는 모든 후속 계산이 정확 해지고 UIStackView
동작이 고정되면 호출되지 않을 것입니다.
비슷한 토론 here 및 here. 흥미로운 점은 XCode8에서 새로운 기본값은 XIB 파일의 뷰 크기를 저장하지 않고 처음 레이아웃을 통과하는 동안 해결되는 초기 크기가 1000x1000 인 모든 것을 가져 오는 것입니다. UIStackView
을 제외하고, 나는 생각한다.