autolayout이 완료된 후 UICollectionViewCell
에있는 CALayer
에있는 프레임, 모서리 반경 및 기타 조작을 설정하려는이 문제가 발생했습니다. 하지만 놀랍게도 셀의 서브 뷰와 contentView는 (0.0, 0.0, 0.0, 0.0)
일 때마다 layoutSubviews()
이 셀의 하위 클래스에서 호출 될 때마다 나타났습니다. 나는 마침내이 문제에 대한 해결책을 찾았으며 비슷한 문제에 직면하고 있다면 모든 사람들이 이것을 볼 수 있도록 게시하고 있습니다.UICollectionViewCell의 하위 뷰의 너비와 높이가 0입니다.
1
A
답변
1
나는 1 주일 넘게 머리를 부딪 치고 있었다. 그러나 마침내!
가 collectionView
표시하는 것입니다 셀의 contentView
에 대한 새로운 레이아웃주기를 UICollectionViewDelegate
의 collectionView(_: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
에서 자동 레이아웃을 실행해야합니다.이 수동 트리거는 성가신 것처럼 보일 수 있지만 최상의 결과를 얻을 수 있습니다.