标签: uicollectionviewlayout

使用节的UICollectionView在单元格之间留下间隙

我正在使用UICollectionView来显示几个数据部分.这些部分具有固定数量的项目.我希望所有项目都以连续网格显示.

现在我以水平方向完成此任务: 在此输入图像描述

但在纵向上,这留下了很大的差距: 在此输入图像描述

我想解决各部分之间的这种差距,因为它很难看并且不属于那里.我很乐意使用自定义的FlowLayout,但是我找不到一个指向正确方向的教程(我发现了几个,但没有一个真正触及这个问题.)

任何人都可以帮我解决这个问题,或者至少指出我正确的方向?

PS:我已经实现了部分,因为我正在加载数据.目前使用1部分不是我的选择.

更新 请求我正在添加用于当前FlowLayout的值.我在全屏(减去UINavigationBar)UICollectionView上使用标准的水平流布局,每个部分有21个项目.

  • 滚动方向:水平
  • 细胞大小:248,196
  • 页眉/页脚大小:无
  • 细胞的最小间距:10
  • 线的最小间距:10
  • 部分插图:20,20,10,10

ios uicollectionview uicollectionviewlayout

4
推荐指数
1
解决办法
7686
查看次数

使用 UICollectionView 创建网格布局

我想构建一个类似于网格的集合视图布局。和

  1. 包含子行的行
  2. 包含子列的列
  3. 具有可变高度的行。
  4. 应该可以在两个方向上滚动。
  5. 应该可以添加/删除行/列

我尝试使用集合流布局,但它开始变得复杂。构建自定义布局对我来说似乎是更好的选择。

我面临的一些问题:-

  1. 存储网格信息(仅布局)的数据结构(基本类层次结构),支持轻松添加/删除行和列。
  2. 考虑到行的大小可变,计算内容视图的高度。
  3. 计算将位于可见矩形内的行范围。现在我要收集所有行的高度信息并将它们存储在一个数组中,并进一步计算内容大小高度。同样要确定哪些所有行都位于给定的矩形内,我必须应用谓词。在每次调用“layoutAttributesForElementsInRect”时这样做也会在行数为 500+ 仍然可以接受时降低 fps。
  4. 我尝试为可见的行和列维护一个 NSSet 布局属性,并在行/列移入和移出时清除/添加属性。但这在为可见项目创建每个属性时更慢。还有哪些设计模式最适合网格?
  5. 最后但并非最不重要的是,是否可以使用 UICollectionView 设计这样的东西?

关于如何处理的任何想法,

谢谢 :)

objective-c ios uicollectionview uicollectionviewlayout

4
推荐指数
1
解决办法
1万
查看次数

如何以编程方式更改UICollectionView footerview的高度

我遇到一个问题,在我的UICollectionView中,我需要在返回的记录为0时显示一个页脚.下面的代码似乎工作正常,当没有记录时,会显示页脚.但是,有一个问题是,当有记录时,虽然页脚被隐藏,代码LINE 1似乎没有任何效果,这意味着页脚的空白区域仍然存在.知道怎么摆脱它吗?即将页脚高度更改为0,或者在返回记录时删除页脚.

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section {
    CGSize footerSize = CGSizeMake(320, self.view.frame.size.height);
    return footerSize;
  }

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
    UICollectionReusableView *reusableview = nil;

    if (kind == UICollectionElementKindSectionFooter) {
        reusableview = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"FooterView" forIndexPath:indexPath];
        reusableview.hidden = YES;
        if([topicArray count]>0){
            reusableview.hidden = YES;
            //reusableview.frame = CGRectMake(0, 0, 0, 0);
            CGRect newFrame = reusableview.frame;
            newFrame.size.height =0;
            reusableview.frame = newFrame; // <-------- LINE 1.
        }else{
            reusableview.hidden = NO;
            reusableview.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
            UIImageView *oopsImgView =[[UIImageView …
Run Code Online (Sandbox Code Playgroud)

uicollectionview uicollectionviewlayout

4
推荐指数
1
解决办法
9114
查看次数

如何在UICollectionView中动态调整标题视图的大小?

我在UICollectionView中有头(一个UICollectionReusableCell),其高度需要是可变的.我怎样才能根据其内容的高度调整自己的大小?

并不需要支持的iOS 7,并自动布局的解决方案是优选的(如果存在的话).

ios uicollectionview uicollectionviewlayout swift ios8

4
推荐指数
1
解决办法
6344
查看次数

Swift - 无法动态更改UICollectionViewFlowLayout

viewDidLoad我设置collectionViewLayoutUICollectionViewCell一个UILabel写着"加载内容......",当应用程序需要去抓取来自服务器的内容,但它确实是这样的:

let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
...
// some configuration for the layout

// here it crash:
collectionView.setCollectionViewLayout(layout, animated: true)
Run Code Online (Sandbox Code Playgroud)

它说这个消息崩溃了:

*由于未捕获的异常'NSRangeException'终止应用程序,原因:'* - [__ NSArrayM objectAtIndex:]:索引0超出空数组的边界'***第一次抛出调用堆栈:(0x24479b0b 0x23c36dff 0x2438a6d3 0x29275999 0x29271d13 0x29272aaf 0x28be537f 0x28be4667 0x1778dc 0x165f48 0x1661b8 0x16e774 0x16f038 0xf950c 0xf9174 0xdefb0 0xe1934 0xdf98c 0x52ed78 0x52d700 0x52bfc8 0x4df9c0 0x1531ba7 0x1531b93 0x1536659 0x2443b755 0x24439c4f 0x243881c9 0x24387fbd 0x259a4af9 0x28ac0435 0x131254 0x24034873)的libc ++ abi.dylib:与类型NSException的未捕获的异常终止

我所做的事情是将其collectionViewLayout替换为另一个.

我尝试通过invalidateLayout()重新加载或者不重新加载collectionView之前的布局来使布局无效,collectionViewLayout并且它仍然会崩溃.

我该怎么做才能collectionViewLayout …

ios uicollectionview uicollectionviewlayout swift

4
推荐指数
1
解决办法
1054
查看次数

如何在没有动画的情况下从集合视图中删除项目?

我有一个支持集合视图的项目 ID 数组。当用户滚动浏览集合视图时,每个单元格都会获取该 ID 的对象,然后获取与该对象关联的图像。如果一个对象碰巧没有与之关联的图像,我想从数组中删除该项目 ID,然后更新屏幕上的集合视图。问题是有很多没有图像的对象(大量更新),我需要立即更新集合视图(没有时间动画)。

使用reloadData会导致集合视图在删除每个对象时闪烁。使用deleteItemsAtIndexPaths需要动画,这是不希望的。有什么方法可以从集合视图中删除项目而不使用动画吗reloadData

ios uicollectionview uicollectionviewlayout

4
推荐指数
1
解决办法
2527
查看次数

如何将collectionview单元格扩展为全屏

我创建了一个水平集合视图,单个单元格显示在屏幕上.我尝试在每个单元格中预览另一个视图,当用户向上滑动时,单元格应扩展为全屏.我不知道如何解决这个问题?如何将单元格扩展为全屏动画?

objective-c ios uicollectionview uicollectionviewcell uicollectionviewlayout

4
推荐指数
1
解决办法
5282
查看次数

移动时在 UICollectionView 中保持自定义单元格的大小

我有一个水平集合视图,每个单元格都有自己的宽度。我使用默认的 UICollectionViewFlowLayout。重新排列时,单元格继承了它在此移动过程中覆盖的单元格的宽度,这是我不想要的。任何想法,如何避免这种行为?

ios uicollectionview uicollectionviewlayout swift

4
推荐指数
1
解决办法
2335
查看次数

如何以编程方式添加 UICollectionViewLayout?

我正在尝试以UICollectionViewLayout编程方式设置一个。我UICollectionView也在不使用故事板的情况下使用 a ,以及设置其约束。

我已经按照关于这个主题的Ray Wenderlich教程进行了一些更改以使代码适应 Swift 3(正如 AZCoder2 所做的那样https://github.com/AZCoder2/Pinterest)。

由于所有这些示例都使用故事板,因此我还引入了一些更改来创建UICollectionView及其UICollectionViewLayout

collectionViewLayout = PinterestLayout()
collectionViewLayout.delegate = self
collectionView = UICollectionView.init(frame: .zero, collectionViewLayout: collectionViewLayout)
Run Code Online (Sandbox Code Playgroud)

结果:我什么也看不到。如果我UICollectionViewLayout用 Apple 提供的 ( UICollectionViewFlowLayout)更改,至少我可以看到带有内容的单元格。如果我实施一些更改并使用故事板,一切都很好,但这不是我想要的方式。整个视图以编程方式制作,集合视图是其中的一部分。

我错过了什么?这与我实例化的方式有关UICollectionViewLayout吗?我是否必须注册某些东西(例如,因为我需要注册可重用单元)?

pinterest uicollectionview uicollectionviewlayout swift

4
推荐指数
1
解决办法
1万
查看次数

根据部分更改UICollectionView布局

我目前正在UICollectionView用几个部分(假设是4个)实现一个,如下图所示:

uicollectionview

从第0节到第2 UICollectionViewFlowLayout节,每个节的单元格大小都不同,但是对于第3节,这是自定义布局(瀑布布局)。

我已经实现了2种不同的布局,它们可以在单独的环境中很好地工作UICollectionView,但是我在同一个2种布局之间切换时遇到了一些麻烦UICollectionView

首先,可以将布局从一个部分更改为另一个部分,如果这样的话,可以实现这一点。

ios uicollectionview uicollectionviewlayout swift

4
推荐指数
1
解决办法
1310
查看次数