4

세 개의 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에 다음 코드를 추가하여이 문제를 해결하고 있어요 : collectionViewUIStackViewview 안에

if collectionView.bounds.size.width > view.bounds.size.width { 
     view.layoutIfNeeded() 
    } 

UIViewController의 기본보기입니다. 이렇게하면 뷰의 크기를 기반으로하는 모든 후속 계산이 정확 해지고 UIStackView 동작이 고정되면 호출되지 않을 것입니다.

비슷한 토론 herehere. 흥미로운 점은 XCode8에서 새로운 기본값은 XIB 파일의 뷰 크기를 저장하지 않고 처음 레이아웃을 통과하는 동안 해결되는 초기 크기가 1000x1000 인 모든 것을 가져 오는 것입니다. UIStackView을 제외하고, 나는 생각한다.

답변

0

당신은 sizeForItemAtIndexPath()이 있습니까? itemSize이 있습니까?그 기능을 구현하는 것이 런타임시 동적으로 UICollectionViewCell의 크기를 결정하는 유일한 신뢰할 수있는 방법이라는 것을 알았습니다.

관련 문제