问题标签 [uicollectionviewlayout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
21 回答
52109 浏览

ios - 将设备旋转为横向时的 UICollectionViewFlowLayout 大小警告

我们使用 UICollectionView 来显示覆盖全屏的单元格(减去状态和导航栏)。单元格大小设置为self.collectionView.bounds.size

这将为每个设备设置正确的大小。每个单元格都被定义为没有插图,并且布局没有页眉或页脚。但是,当我们从纵向旋转到横向时,我们会得到以下“抱怨”:

现在我理解了这个错误,但是我们重置了单元格的大小并使用了旋转过渡中内置的流布局:

单元格在横向中正确渲染。

似乎 Flow Layout 看到了旧的单元格大小(这会导致抱怨,因为它太高了),但确实读取/渲染了didRotateFromInterfaceOrientation.

有没有办法摆脱投诉?

我们尝试在设备旋转过渡期间找到另一个挂钩,该挂钩可以访问正确的目标屏幕尺寸(与当前屏幕尺寸相比),但没有成功。调试输出显示投诉发生在 之后willRotateToInterfaceOrientation但之前didRotateFromInterfaceOrientation

我们也验证了显而易见的;如果我们将单元格高度设置为小于横向屏幕高度的固定大小,则不会发生投诉。此外,从横向旋转回纵向时不会发生投诉。

一切运行良好,并且渲染正确。然而,这种抱怨让我们感到担忧。其他人有任何想法或解决方案吗?

0 投票
2 回答
4539 浏览

ios - 在 UICollectionView 中显示图像 - 如何实现图像之间的固定垂直间距?

我正在使用 UICollectionView 在 iPhone 应用程序 (iOS6) 中呈现图像网格。

我正在为 UICollectionView 使用垂直滚动,并且图像都有固定的宽度和不同的高度。图像的宽度设置为在 iPhone 上显示 3 列图像。这工作正常,我得到了网格视图中显示的图像。

但是,由于我的图像具有不同的高度,因此列中图像之间的垂直间距会发生变化,这看起来不太好,如下图所示(用 HTML 制作的模型):

显示图像当前布局方式的图像

相反,我希望实现更流畅的流动,其中一列中图像之间的垂直间距相同。以下模型显示了我希望它如何工作:

我希望图像流如何工作的示例

关于如何解决这个问题的任何想法?

此外,作为奖励问题,如果应用程序不是为 iOS6 构建的(因为 UICollectionView 仅在 iOS6 中可用),是否有人知道解决相同问题的方法。通过使用 3rd 方组件或使用标准 iOS 控件解决它。

0 投票
0 回答
206 浏览

ios - 交换 2 个 UICollectionViewCells

我正在尝试交换 2 个表格单元格。所以如果布局是这样的

123 456 789

我将单元格 3 拖到单元格 5 它将是

125 436 789

但是如果我继续拖动而不提升到单元格 7,那么它将是

127 456 389

并为这一切设置动画。我有来自LXReorderableCollectionViewFlowLayout的基本代码,并进行了一些编辑,但仍然存在一些问题。就像在移动单元格时,另一个单元格看起来像一个副本并跟随它直到我放手,有时它会完全复制该单元格。在我的集合视图中,我使用一个 UICollectionViewCell 子类,但我有 2 个外观,一个包含信息的单元格和一个空单元格。

这是代码

LXReorderableCollectionViewFlowLayout.h - http://pastie.org/7188891 LXReorderableCollectionViewFlowLayout.m - http://pastie.org/7188886

(不能在这里发布代码,因为它太长了不能发布)

0 投票
1 回答
2378 浏览

ios - 如何将整个标题视图设置为 UICollectionView?

我想将标题设置为集合视图,就像 UITableViewController 的 setTableHeader 一样。

我找到了在集合视图上设置每个部分的标题的方法,但我找不到如何设置整个标题的标题视图。

Apple 对 UICollectionViewLayout 的引用说:“补充视图呈现数据但与单元格不同。与单元格不同,补充视图不能由用户选择。相反,您使用补充视图来实现给定部分或整个部分的页眉和页脚视图等内容集合视图。补充视图是可选的,它们的使用和放置由布局对象定义。”,但我不知道如何为整个集合视图实现标题视图。

我试图通过只在第一部分创建一个节标题视图矩形来实现这一点,但它与 tableHeader 的不同。

在表格视图中,如果我将内容偏移设置为低于标题,则内容大小会自动扩展,以便隐藏标题,尽管存在一些元素。

但是在集合视图中,只有当存在足够多的元素可以滚动时,修改内容偏移才能正常工作。

当存在一些元素时,我尝试动态扩展内容大小,但它似乎无法正常工作......

0 投票
2 回答
3626 浏览

ios - UICollectionViewFlowLayout minimumInteritemSpacing 错误?

经过一番摆弄后,我开始怀疑 UICollectionViewFlowLayout 的间距代码中存在错误。

问题很简单:我想在屏幕上显示五个按钮,并且我希望按钮之间的间距为 1 pt(视网膜显示屏上为 2 像素)。为了实现这一点,我将 minimumInteritemSpacing 设置为 1.0,将单元格宽度设置为 159.5 pt,这样两个单元格的总和将达到 319 pt,从而为空间留下一个点。当我希望第三个按钮成为视图的全宽时出现问题,因为流布局导致间距为 0.5 pt,尽管已被告知保持最小值为 1.0。(见截图1)

正确的布局错误的间距

设置间距的代码发生在

和单元格的大小

另一方面,如果我没有使第三个按钮全宽,则间距的行为与预期一样,尽管它不应该影响不同行的项目间间距。(截图2)

正确的间距错误的布局

应该注意的是,在情节提要中设置了 CollectionView、CollectionViewCell 和 UILabel,并且我已经确保屏幕截图中可见标签的框架小于单元格的宽度,我也尝试过完全删除标签但是结果相同。

我不明白为什么会发生这种情况,除非它是流布局代码中的错误,并且我在将其作为错误提交之前在这里寻找健全性检查。

0 投票
1 回答
451 浏览

objective-c - UICollectionViewCell 中的按钮

我正在尝试将 a 添加到被调用UIButton的实例中。我在子类中为 the 创建了一个插座,并在 Interface Builder 中添加了操作,但我似乎无法让事情正常工作。UICollectionViewCellMyCollectionViewCellUIButton

以前有没有人实现UIButtonUICollectionViewcell,有没有示例代码?

谢谢

0 投票
1 回答
343 浏览

ios6 - 为 UICollectionView 布局散列一个非常大的数据集的最快方法是什么... NSIndexPath 太慢了

我有一个带有自定义布局的大型数据集(> 2000 个项目)的 UICollectionViewController。使用部分,滚动性能变得非常不稳定。使用 Instruments 和一些测试,我确定这是由于在布局中查找 ( layoutAttributesForElementsInRect:)。我在 中缓存布局属性prepareLayout,并以我所知道的最快方式在这里查找它们:

我发现大约 25% 的 cpu 时间都花在了枚举上,主要是在[NSIndexPath isEqual:]. 所以,我需要一种更快的方法来散列这些值。

这一定是可能的,因为我使用相同的数据和分段的 UICollectionViewFlowLayout 进行了交叉测试,并且很顺利。

0 投票
1 回答
271 浏览

animation - IOS:动画 UICollectionViewCells 在改变方向时滑动

我正在寻找覆盖我UICollectionViewFlowLayout以在由于方向变化而改变位置时导致单元格滑动。我目前拥有的是纵向每行 3 个单元格和横向每行 4 个单元格,但我能得到的唯一动画是当我改变方向时默认淡入。

我一直在考虑使用performBatchUpdates,但我很确定这不是我能找到答案的地方。

我也一直在研究layoutAttributesForElementInRectlayoutAttributesForItemAtIndexPath我认为这是我可以找到答案的地方。我不确定是否需要为单元格创建一个新属性(previousCenter也许)并将其用作新动画的起点,或者可能使用performBatchUpdates应该是新帧的值作为要更改的值。

为了记录,我发现的所有动画问题都是关于如何更改动画以插入和删除项目,这不是我想要做的。

0 投票
2 回答
15329 浏览

ios - 在选择时为 UICollectionView 单元格设置动画

我有一个基本的网格UICollectionView。这是一个简单的 2 列多行布局,使用UICollectionViewDelegateFlowLayout. 选择一个单元格后,我想调暗背景,将单元格浮动到屏幕中心,然后根据所选单元格进行工作流。我是新手UICollectionViews,我不确定解决这个问题的最佳方法。

UICollectionView选择单元格时,我应该有自定义布局吗?

或者有没有一种方法可以为选定的单元格设置动画,而无需创建新的布局

如果有人能让我朝着正确的方向前进,我想我会很好地研究如何执行它。

0 投票
0 回答
1194 浏览

uicollectionview - iOS UICollectionViewController 不显示中心单元格。但可以点击它们

我创建了一个自定义UICollectionViewController.

我有 2 个要显示的专辑 - 每个专辑都有一些不同的功能,但视图基本相同(自定义单元格大小等)。从这个基础ViewController上,我继承了UICollectionViewController我正在寻找的特定行为定制的 2。

遗产是

  • UICollectionViewController -> GalleyViewController(我的基类) -> CameraAlbumViewController

  • UICollectionViewController -> GalleyViewController(我的基类) -> DifferentAlbumViewController

出于某种原因,我没有看到屏幕上的中心单元格,但可以点击它们。我尝试更改单元格的大小,然后看到 3 个单元格,但单元格的边界已关闭(我可以在单元格之间进行选择并调用委托方法)

考虑到继承可能不正确(可能缺少基类中的某些内容),我创建了一个新项目,其中包含最基本的用法,UICollectionViewController并遵循了几个教程。

我仍然没有看到中心细胞

由此,我相信故事板中的某些内容可能是不正确的。

我的代码是这样的:

一些故事板的截图,来自模拟器的相册

故事板 单元配置 模拟器中的结果 我期望从相册中获得的图像