问题标签 [nscollectionviewflowlayout]

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 投票
3 回答
1027 浏览

objective-c - 带有 NSCollectionView 的全宽 NSCollectionViewFlowLayout

我有一个NSCollectionViewFlowLayout包含以下内容:

我已经尝试过使布局响应的方法(在调整大小时设置宽度)。我尝试添加以下内容:

如果我扩展集合视图(调整更大),这会很好。但是,如果我尝试折叠视图(缩小尺寸),则会出现以下异常:

关于如何解决这个问题的任何建议?

注意 1:这是 macOS 而不是 iOS(即使错误消息指出 UICollectionViewFlowLayout)。

注意 2:即使我收到警告/错误,布局宽度仍然有效,但我想找出根本问题。

0 投票
1 回答
233 浏览

ios - Swift:collectionView 单元格

我创建collectionView并且我有 3 个单元格。我希望我的单元格在所有设备的所有屏幕上看起来都像这样:

在此处输入图像描述

但我有 iPad 的这个结果。

在此处输入图像描述

如何解决?

更新

我加collectionView进去UIViewController。我有这个限制collectionView

在此处输入图像描述

调整我的细胞大小:

在此处输入图像描述

代码:

0 投票
1 回答
355 浏览

cocoa - 如何在边界更改时为 NSCollectionViewLayout 的重新布局设置动画?

我有一个NSCollectionViewLayout非常相似的基本实现NSCollectionViewFlowLayout

它将项目放置在水平行中。如果没有足够的空间,则将下一个项目添加到下一行,依此类推。

我的问题:当一个项目从第一行移动到第二行时,如何为布局更改设置动画?

这是一个例子:

重新布局

注意项目#3 如何从第一行“跳跃”到第二行。我想为这种变化制作动画。

有很多方法可以动画添加/删除项目,但我无法弄清楚如何在没有项目更改时为布局更改设置动画。

0 投票
1 回答
319 浏览

swift - NSCollectionViewFlowLayout collectionViewContentSize 更新但集合视图框架不更新

我有多个自定义 NSCollectionViewFlowLayouts,其中一些具有垂直方向,另一些具有水平方向。

设置水平布局时,集合视图框架会根据内容正确设置高度和宽度,但是当我将布局更新为垂直布局时,框架会保持以前的布局内容大小。

用鼠标手动调整窗口大小会导致布局正确显示,但我不确定为什么这不能以编程方式正确更新。正确的大小是从布局内容大小中调用的,在 WWDC 的“NSCollectionViews 的新功能”演示文稿中,您可以看到这不是问题。

同样的问题可以在 Apples 2015 WWDC 中看到https://developer.apple.com/library/prerelease/mac/samplecode/CocoaSlideCollection/CocoaSlideCollectionUsingNSCollectionViewonOSX10.11.zip中的 NSCollectionViews 示例项目的新增功能

在包裹布局和圆形布局之间切换时,您最初会看到高度不正确,反之亦然。

我不确定这是否是一个错误,或者我是否在实现中遗漏了任何内容。

更新:这看起来是一个操作系统错误,暂时我们不得不解决这个问题。在此处发布,以便其他人可以看到中间解决方案,或者可能根据上述描述建议其他人。(https://github.com/zenangst/Blueprints/pull/93

0 投票
1 回答
182 浏览

cocoa - 具有使用自动布局的动态宽度项目的 NSCollectionView

我正在构建一个NSCollectionView水平滚动的项目,看起来像这样:

目标

NSCollectionView在具有自动布局约束的 .xib 中定义了我的项目。项目的宽度由标签的宽度加上计数标签(及其周围的药丸)的宽度定义。所有这一切都被一个NSView称为“盒子”的封装。

在此处输入图像描述

以下是 Box 的约束:

在此处输入图像描述

我已经连接了我的数据源,一切看起来都很好,只是我无法根据其中的视图大小来改变项目的宽度。

根据我的阅读,我不能仅仅依靠自动布局来定义这里的大小(我希望我错了),就像我在NSTableView. 所以我试图用sizeForItemAt委托方法计算大小NSCollectionViewDelegateFlowLayout

当我打印fittingSize到控制台时,它看起来是正确的。但是我遇到了Unable to simultaneously satisfy constraints与 Box 大小有关的崩溃(它有一个子类RoundedWrap):

如果我删除将 Box 的后沿固定到包含视图的约束,崩溃就会消失,但是我的NSCollectionView项目根本不会出现。

有没有更简单的方法来完成这一切?如何使用自动布局来设置我NSCollectionViewItem的 s 的动态宽度?

0 投票
0 回答
23 浏览

swift - 调整 NSCollectionViewFlowLayout 以更有效地使用垂直空间

我正在创建一个使用 aNSCollectionView来显示不同大小的单元格的应用程序。截至目前,NSCollectionView使用默认的NSCollectionViewFlowLayout.

现在,视图如下所示:

当前的

但我希望单元格显示如下:

更好的解决方案

右侧的单元格应该居中或顶部对齐,这无关紧要。这是可能的还是我必须编写自己的布局?

0 投票
1 回答
16 浏览

cocoa - NSCollectionViewAttributes 未与自定义 NSFlowLayout 子类正确应用

我目前正在NSCollectionView使用自定义布局。为此,我NSCollectionViewFlowLayout对我的项目进行了子类化以顶部对齐(它们都有固定的宽度,这使得算法非常容易)。我现在遇到的问题是只有我的集合视图中的前九个项目才能正确显示,即顶部对齐。

当最初显示集合视图时,这前九个项目至少部分可见。向下滚动集合视图时出现的其他项目将在没有任何顶部对齐的情况下绘制,只是垂直居中每行作为NSCollectionViewFlowLayout. 通过广泛的日志记录,我可以验证我的布局仅提供NSCollectionViewLayoutAttributes正确修改的顶​​部对齐。

当我调整包含 的窗口的NSCollectionView大小,从而调整集合视图本身的大小时,它的可见部分中的所有项目将突然正确显示。

我错过了什么?

这是我的自定义子类: