ios - 如何使 UICollectionView 的高度可自动调整和滚动?
问题描述
我有一个使用 2 个CollectionViews的ViewController(水平的像 insta-stories 和垂直的(黑色的))。我遇到了Vertical CollectionView不可调整大小的问题,因此我无法向下滚动以获取所有单元格。有什么方法可以使整个页面可滚动以正确显示我的单元格,或者我必须为此使用TableViewController?谢谢
这是一个代码
private var postsCollectionView: UICollectionView?
override func viewDidLoad() {
super.viewDidLoad()
...
initializePosts()
}
func initializePosts() {
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
layout.itemSize = CGSize(width: 380, height: 285)
layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
layout.minimumLineSpacing = 30
postsCollectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
postsCollectionView?.register(PostCell.self, forCellWithReuseIdentifier: PostCell.identifier)
postsCollectionView?.showsHorizontalScrollIndicator = false
postsCollectionView?.showsVerticalScrollIndicator = false
postsCollectionView?.contentInsetAdjustmentBehavior = .always
postsCollectionView?.delegate = self
postsCollectionView?.dataSource = self
postsCollectionView?.backgroundColor = .blue
guard let postsCollections = postsCollectionView else {
return
}
view.addSubview(postsCollections)
}
...
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
postsCollectionView?.frame = CGRect(x: 0, y: 330, width: view.frame.size.width, height: view.frame.size.height).integral
}
解决方案
您可以使用多种方法。
首先在视图控制器的顶视图中添加postsCollectionView,附加视图的边和约束,然后在postsCollectionView中注册section header(UICollectionReusableView),在section header中放一个类似Instagram的横向collection view。
其次,在视图控制器的顶视图中添加一个垂直滚动视图,并应用视图的边缘和约束,在垂直滚动视图中添加一个类似于Instagram的水平集合视图,并添加postsCollectionView。此时,Collection View 应该是动态创建的,使其自身的大小与内容的大小相同,参考以下链接。
推荐阅读
- java - 使用 itext 时出错
- html - 如何使用纯 CSS 创建带有虚线的票形状?
- html - 我基于复选框单击显示 2 个图标,但如果我选择 >1,则不应出现复选框
- java - 从 String java 中删除未知数量的字符
- node.js - nodejs - Mongoose 5.3.8 - GeoJSON 查询不起作用
- swift - BaseObject 可以有 NSObject、Mappable 和 Object swift
- c++ - 更改静态文本 C++ 的颜色
- python - 在 python 中是否有类似 ansible 的模块?
- asp.net-mvc - Ck 编辑器不在服务器上工作,但它在本地机器 asp.net mvc 上工作
- node.js - 在 mevn 堆栈上显示集合项