我有一个UIScrollView,它展示了一个图标网格.如果你想象iOS跳板的布局,你会非常接近正确.它有一个水平的分页卷轴(就像跳板一样).然而,似乎布局不太正确.它看起来好像是从上到下排列项目.因此,由于要显示的项目数量,我的最后一列中只有两行.我希望最后一页的最后一行有两个项目,就像你在跳板上看到的那样.

如何使用UICollectionView及其相关类来实现这一点呢?我必须写一份定制的UICollectionViewFlowLayout吗?

推荐答案

第一种方法

使用UIPageViewControllerUICollectionViewControllers的数组怎么样?你必须在每UICollectionViewController件物品中取出适当数量的物品,但这并不难.你会得到与跳板完全相同的外观.

第二种方法

我考虑过这一点,我认为你必须:

self.collectionView.pagingEnabled = YES;

并通过子类化UICollectionViewLayout来创建您自己的集合视图布局.您可以从自定义布局对象访问self.collectionView,因此您将知道集合视图的framenumberOfSectionsnumberOfItemsInSection:的大小.有了这些信息,您就可以计算出单元格的frames(在prepareLayout中)和collectionViewContentSize.以下是一些有关创建自定义布局的文章:

3rd approach

您可以在不创建自定义布局的情况下执行此操作(或其近似值).在空白视图中增加UIScrollView,在其中设置启用寻呼.在滚动视图中,添加a集合视图.然后添加宽度约束,在代码中判断您有多少项,并将其constant设置为正确的值,例如(self.view.frame.size.width * numOfScreens).它看起来是这样的(单元格上的数字显示indexPath.row):https://www.dropbox.com/s/ss4jdbvr511azxz/collection_view.mov如果您对单元格的排序方式不满意,那么恐怕您只能 Select 1.或2.

Ios相关问答推荐

什么是最好的方式使用DateFormatters在可扩展视图cellForRowAt方法

ITMS—91053:Flutter Project中缺少API声明

彩色进度线--SWIFT

使用CGAffineTransform旋转视图只起作用一次吗?

SwiftUI@Observable不跟踪父类属性中的更改以更新视图

ios PWA从外部链接返回后降低了innerheight

视图未更新以在按下按钮时显示另一个视图

每次我路由到应用程序的主屏幕时,都无法使组合订阅正常工作

UIView 阴影不适用于自定义扩展

视图之间的 SwiftUI 过渡,没有过渡

将值传递给导航链接视图中的文本框

无法初始化 FirebaseApp - Flutter

SensorKit - 获取数据不调用结果委托函数

界面生成器 - 无法从路径加载设计对象(空)

在 iOS 编程中使用 Storyboard 代替 xib 文件有什么好处?

如何忽略touch 事件并将它们传递给另一个子视图的 UIControl 对象?

在原生和 phonegap 之间挣扎,简单的应用需求

有没有办法在应用store 之外分发 ios 应用程序?

如何为 NSDate 添加一个月?

iOS13状态栏背景 colored颜色 与大文本模式下的导航栏不同