2017-03-25 5 views
1

autolayout이 완료된 후 UICollectionViewCell에있는 CALayer에있는 프레임, 모서리 반경 및 기타 조작을 설정하려는이 문제가 발생했습니다. 하지만 놀랍게도 셀의 서브 뷰와 contentView는 (0.0, 0.0, 0.0, 0.0) 일 때마다 layoutSubviews()이 셀의 하위 클래스에서 호출 될 때마다 나타났습니다. 나는 마침내이 문제에 대한 해결책을 찾았으며 비슷한 문제에 직면하고 있다면 모든 사람들이 이것을 볼 수 있도록 게시하고 있습니다.UICollectionViewCell의 하위 뷰의 너비와 높이가 0입니다.

답변

1

나는 1 주일 넘게 머리를 부딪 치고 있었다. 그러나 마침내!

collectionView 표시하는 것입니다 셀의 contentView에 대한 새로운 레이아웃주기를 UICollectionViewDelegatecollectionView(_:willDisplay:forItemAt:) 기능을 구현하고 트리거 : 이것은 나를 위해 완벽하게 일 것입니다.

스위프트 :

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { 
    cell.contentView.setNeedsLayout() 
    cell.contentView.layoutIfNeeded() 
} 

목표 - C :

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    [cell.contentView setNeedsLayout]; 
    [cell.contentView layoutIfNeeded]; 
} 

이 매우 성가신 작업을하지만, 콜렉션 뷰가 새로운 셀을 삽입하고 자동 레이아웃을 적용 할 때마다로 나타날 수 있습니다, 셀의 frame은 초기 레이아웃 사이클 이후에 보통 (0.0, 0.0, 0.0, 0.0)이고 (layoutSubviews()에서 관찰 된 바와 같이) 셀이 화면에 표시되기 직전에 레이아웃이 수동으로 트리거 된 경우 layoutSubviews()에서 관찰 된 하위 뷰 frame이 자동 레이아웃 완료 후 예상되는 것입니다.

셀 자체가 아닌 contentView에서 자동 레이아웃을 실행해야합니다.이 수동 트리거는 성가신 것처럼 보일 수 있지만 최상의 결과를 얻을 수 있습니다.