다음은 XIB 파일없이 자동 레이아웃으로 맞춤 UICollectionViewReusableView를 처리하는 방법입니다.
referenceSizeForHeaderInSection
대리자 메서드를 구현합니다.
- 헤더보기로 사용하는보기를 인스턴스화하십시오.
- 깜박임을 방지하기 위해 표시 여부를 숨김으로 설정합니다.
- 보기를 collectionview의 수퍼 뷰에 추가하십시오.
- 자동 레이아웃을 사용하여 레이아웃을 설정하여 예상되는 시각적 결과를 일치시킵니다.
- 호출
setNeedsLayout
및 layoutIfNeeded
- 수퍼에서
주의보기를 제거 : 나는,이 솔루션의 큰 팬이 아니다는 collectionview의 수퍼 각 시간을 사용자 정의보기를 추가로 계산을 수행 . 그래도 성능 문제는 알지 못했습니다.
주의 # 2 : 임시 해결 방법으로 취급하고 발행 된 자체 보완보기로 마이그레이션합니다.
자동 레이아웃 용으로 PureLayout을 사용하고 있습니다.
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
let header = CustomHeaderView()
header.isHidden = true;
self.view.addSubview(header)
header.autoPinEdge(toSuperviewEdge: .leading)
header.autoPinEdge(toSuperviewEdge: .trailing)
header.autoPin(toTopLayoutGuideOf: self, withInset: 0)
header.setupHeader(withData: self.data)
header.setNeedsLayout()
header.layoutIfNeeded()
header.removeFromSuperview()
return header.frame.size
}
http://stackoverflow.com/a/33696385/6064629 아마도 도움이 될 것입니다. – Himanshu
고마워요 @himanshu. 나는 그 해결책이 기본적으로'UICollectionReusableView'의 여분의 복사본을 인스턴스화하고 바로 뒤따라 잇기 때문에 더 나은 대답이되기를 바라고 있습니다. –
@KelvinLau 당신은 무엇인가 알아낼 수 있었습니까? XIB 파일이 필요하기 때문에 제공된 솔루션에 대한 열렬한 팬이 아닙니다. – Michael