Cul*_*tes 3 xcode ios uicollectionreusableview swift swift2
使用 Xcode 7.0 beta, Swift 2.0, IOS 9 支持
我有一个视图控制器,其中包含一个集合视图。里面是一个标题:集合可重用视图,一个集合:集合视图单元格和一个页脚:集合可重用视图。
在标题内,我具有登录、注册或注销的功能。根据单击的按钮,此标题内的视图将被隐藏或不隐藏。现在我要做的最后一件事是重新调整标题视图(集合可重用视图)的框架高度。因为在登录时,RegisterView 和 LoginView 都会被隐藏,这会留下大量的空白空间。
这是我的结构的图像:

我很快注意到我无法向 Collection Reusable View 添加任何约束:(
标题集合可重用视图的所有功能都在一个扩展UICollectionReusableView. 我能读self.frame.height,但我不能写。我似乎能够编辑框架(为什么高度是只读的,而框架不是,苹果?)。然而,这没有效果,甚至self.frame = CGRectZero没有做任何事情。
我注意到在初始化页眉和页脚 ( func collectionView, switch on kind -> UICollectionElementKindSectionHeader) 时,我可以在主 ViewController.swift 中执行此操作,但这不是我想要的,因为它应该在单击按钮时更改。
现在,我将 RegisterView 向上移动(我编辑了代码中的顶部约束)。
您不能直接操作集合视图中视图的大小。要控制它们的大小,您的集合视图的委托应符合UICollectionViewDelegateFlowLayout,然后您可以通过collectionView(_:layout:referenceSizeForHeaderInSection:)在该协议上实现该方法来返回该部分中标头的任何大小。如果标题不可见,只需返回0.0其高度即可。一旦您以需要更新此布局的方式更改了视图控制器的状态,请调用invalidateLayout()集合视图的布局以触发要调用的委托上的这些布局方法。
class MyCollectionViewController : UICollectionViewController, UICollectionViewDelegateFlowLayout {
var shouldHideHeader: Bool = false {
didSet {
self.collectionView?.collectionViewLayout.invalidateLayout()
}
}
let defaultHeaderSize: CGFloat = 100.0
let loginHeaderSectionIndex: Int = 0
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
if self.shouldHideHeader && section == self.loginHeaderSectionIndex {
return CGSize(width: collectionView.bounds.width, height: 0.0 )
}
else {
return CGSize(width: collectionView.bounds.width, height: self.defaultHeaderSize)
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2435 次 |
| 最近记录: |