【发布时间】:2018-10-24 22:23:00
【问题描述】:
我正在尝试根据 myView 的高度调整我的 CollectionView Header 的高度。例如,我希望能够输入:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSize(width: view.frame.width, height: 100)
} //Instead of 100 I want to say: **myView.frame.height**
但由于我在标头类中创建了 myView 我无法访问它,我想知道是否有人可以帮助我或有更好的方法来做到这一点。我真的很感激!
这是我的代码:
class MyProfileCollectionView: UICollectionViewController, UICollectionViewDelegateFlowLayout {
override func viewDidLoad() {
super.viewDidLoad()
self.collectionView?.register(MyProfileHeader.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: headerIdentifier)
}
override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind:
String, at indexPath: IndexPath) -> UICollectionReusableView {
let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier:
headerIdentifier, for: indexPath) as! MyProfileHeader
header.backgroundColor = .red
return header
} //HERE
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSize(width: view.frame.width, height: 111)
}
}
这是我创建 myView 的 Header 类:
class MyProfileHeader: UICollectionReusableView, UICollectionViewDelegate {
override init(frame: CGRect) {
super.init(frame: frame)
self.addSubview(myView)
myView.widthAnchor.constraint(equalToConstant: 50).isActive = true
myView.heightAnchor.constraint(equalToConstant: 70).isActive = true
myView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
myView.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
}
//I want my headers height be equal to myView's height so if i change myView's height the headers height changes automatically.
var myView: UIView = {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
view.backgroundColor = .gray
return view
}()
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
【问题讨论】:
-
如果您有权访问您的收藏视图,您始终可以找到您的视图。 supplementaryView(forElementKind:at:)
标签: swift uicollectionview uicollectionreusableview