2017-12-11 4 views
0

저는 매월 UITableView 셀에 포함 된 UICollectionView 인 앱용 캘린더를 만들고 있습니다. TableView는 화면의 안전 영역에 고정되어 있으므로 선행 및 후행 제약은 화면의 왼쪽 및 오른쪽 가장자리에서 16입니다. UICollectionView가 테이블 셀의 ContentView에 고정되어 있습니다.UICollectionView가 항목 크기를 제공하지 못했습니다.

CollectionView 내의 항목과 항목 사이의 간격과 섹션 삽입은 모두 0으로 설정됩니다. 따라서 연속으로 7 일을 얻으려면 itemWidth = tableView.frame.width/7을 사용합니다. 그런 다음 sizeForItem() 메서드에서 DelegateFlowLayout 프로토콜의이 값을 너비와 높이로 설정합니다.

실행시 모든 값이 올바르게 계산됩니다. 예를 들어 iPhone 8 화면에서 tableWidth는 343, itemWidth는 49, itemSize는 (49, 49)입니다.

enter image description here

을 그리고 이것은 아이폰 SE 결과입니다 :하지만 화면에는 다음과 같습니다

enter image description here

내가 프로그래밍 간격 레이아웃을 설정했지만, 그것은 도움이되지 않습니다. 누구나 내가 어리 석고 어디에 7 개의 동등한 조각이 화면에서 8 또는 6으로 바뀌고 있는지 설명 할 수 있습니까?

업데이트. ViewController의 기본보기에서 너비를 계산하려고했습니다 : itemWidth = (view.frame.width-32)/7 (32는 안전 영역 인세 트 합계 - 2 * 16). 여전히 간격이 0 인 경우 8 또는 8plus와 같은 더 큰 화면에서이 문제가 해결되었지만 SE는 주당 6 일간 계속 표시되며 항목 간 간격을 강제로 지정합니다. 이 시점에서 나는 레이아웃 로직에 대해 전혀 이해하지 못했다!

+0

'tableView.frame.width' 대신'collectionView.frame.width'를 사용해보십시오. 또한 항목과 행 사이의 간격이 0이라고 말하면'minimumLineSpacingForSectionAt' 및'minimumInteritemSpacingForSectionAt' 메서드에서 0을 반환합니까? – kbunarjo

+0

예, 간격은 IB와 해당 방법을 사용하는 코드에서 모두 설정됩니다. 난 collectionView 너비 - 같은 결과를 사용하여 시도했다. –

+0

컬렉션보기의 항목 크기를 가져온 후 테이블보기/컬렉션보기의 너비가 변경된 것 같습니다. 그걸 확인할 수 있니? 그렇지 않으면 코드가 작동합니다. – torap

답변

0

연구 2 일 후에 이해할 수있는 점은 다른 화면 너비를 7로 나누면 부동 소수점 결과에 따라 모호함이 발생할 수 있다는 것입니다. SE의 320 포인트 화면에는 간격없이 7 개의 동일한 크기의 셀을 넣을 수없는 0.00000001이 있어야합니다.

그래서 저를위한 해결 방법은 결과 itemWidth 바닥재 :이 모든 화면 크기에 예측 가능한 결과를 제공

itemWidth = CGFloat(floor(Double(view.frame.width-32)/7)) 

- 매주 지금 7 일이있다.

관련 문제