标签: uicollectionviewcell

在UICollectionView上禁用单元重用

我在我的应用程序中使用UICollectionView,在单个单元格上使用手势识别器,允许用户"滑开"单元格以显示下面的更多数据.

问题是,我经常在CollectionView中重新加载数据; 因为应用程序每3秒钟左右收到一次更新.当细胞处于滑动过程中时,这会导致不需要的行为,同时可以重复使用集合视图单元.

用户将开始滑动单元格,应用程序将接收更新,reloadData,并且不同的单元格将开始接收手势,并开始滑动.

我已经尝试在幻灯片发生时禁用应用程序的更新,但这导致了应用程序内的其他复杂情况,所以我想知道是否有办法禁用单元格重用,(我最多只有20个单元格,所以我不喜欢我认为性能会大幅下降).

谢谢!

objective-c ios uicollectionview uicollectionviewcell

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

检测iOS UICollectionCell何时离开屏幕

我有一个UICollectionView将图片作为其数据存储区中的元素.

我想将高分辨率pic加载到元素中,只有当它的对应UICollectionViewCell当前显示在屏幕上时.之后,当UICollectionViewCell屏幕关闭时,我想将元素返回UIImage到低分辨率版本.

我的问题是,如何检测UICollectionViewCell屏幕何时关闭?

(我尝试使用该prepareForReuse方法,但我无法预测何时会被调用).

我目前正在使用一段代码,scrollViewDidScroll每次视图滚动时我都会检查self.collectionView.visibleCells以查看哪些单元格已在屏幕上滚动.

这看起来有点开销,我想知道UICollectionViewCell在滚动屏幕的时候是否有自己调用的方法?

ios uicollectionview uicollectionviewcell uicollectionreusableview

10
推荐指数
2
解决办法
6065
查看次数

在Swift中创建水平滚动集合视图

如何轻松地创建一个水平滚动集合视图,填充单元格跨越行而不是列向下?

我希望有5列和3行,但当有超过15项时,我希望它滚动到下一页.
这件事我有很多麻烦.

horizontal-scrolling ios uicollectionview uicollectionviewcell swift

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

如何确定自定义UICollectionViewCell何时在屏幕上100%

在此输入图像描述

从上图我有UICollectionView4个自定义单元格.任何时候屏幕上都可以有2或3个单元格.如何判断屏幕上"单元格1"或"单元格2"何时为100%?

collectionView.visibleCells
collectionView.indexPathsForVisibleItems
Run Code Online (Sandbox Code Playgroud)

返回数组并不会告诉你屏幕上是否有100%的单元格.

在图像的情况下,将显示以下内容 didSelectItemAt

collectionView.visibleCells

[<Shot_On_Goal.MainCollectionViewCell: 0x101f525c0; baseClass = UICollectionViewCell; frame = (190 7.66667; 454 350); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x1c0237300>>, <Shot_On_Goal.HeaderCollectionViewCell: 0x101f4d580; baseClass = UICollectionViewCell; frame = (10 0; 170 365); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x1c0236800>>, <Shot_On_Goal.TheirHockeyNetCollectionViewCell: 0x101f55520; baseClass = UICollectionViewCell; frame = (654 7.66667; 454 350); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x1c0238fe0>>]
Run Code Online (Sandbox Code Playgroud)

collectionView.indexPathsForVisibleItems

[[0, 1], [0, 0], [0, 2]] 
Run Code Online (Sandbox Code Playgroud)

ios uicollectionview uicollectionviewcell swift

10
推荐指数
1
解决办法
942
查看次数

将单个 UICollectionViewCell 对齐到 collectionView 的左侧

我有一个位于 tableView 单元格内的 collectionView。collectionView 有多个部分。如果一节只有一个单元格,则该单元格会居中显示。如何将单个单元格与左侧对齐?

tableView 单元格内的 collectionView

collectionView 具有以下内容flowLayout

let flowLayout = UICollectionViewFlowLayout()
flowLayout.scrollDirection = .vertical
flowLayout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
flowLayout.minimumInteritemSpacing = 0
flowLayout.minimumLineSpacing = 0
flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
collectionView.setCollectionViewLayout(flowLayout, animated: true)
Run Code Online (Sandbox Code Playgroud)

uitableview uicollectionview uicollectionviewcell uicollectionviewlayout swift

10
推荐指数
2
解决办法
1762
查看次数

循环遍历UICollectionview中的所有单元格

我有UICollection,其中将有许多学生项目和每个项目内有开关用于录制考勤.我像这样循环遍历所有可见的细胞.

for(attendancecollectionViewCell* cells in [[self collectionView] visibleCells]){

    NSLog(@"The switch value : %c",cells.attendanceSwitchLabel.isOn);

}
Run Code Online (Sandbox Code Playgroud)

但是,我想循环遍历所有细胞以便参加,而不仅仅是可见细胞.

uicollectionview uicollectionviewcell

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

如何在iOS 7中刷新UICollectionViewCell?

我正在尝试在Xcode 5中开发我的应用程序并在iOS 7环境下进行调试.

我有一个自定义的UICollectionViewLayoutAttributes.

我打算在长按UICollectionViewCell后做一些事情,所以我重写了UICollectionViewCell.m中的方法

- (void)applyLayoutAttributes:(MyUICollectionViewLayoutAttributes *)layoutAttributes
{
    [super applyLayoutAttributes:layoutAttributes];
    if ([(MyUICollectionViewLayoutAttributes *)layoutAttributes isActived])
    {
        [self startShaking];
    }
    else
    {
        [self stopShaking];
    }
}
Run Code Online (Sandbox Code Playgroud)

在iOS 6或更低版本中,- applyLayoutAttributes:在我调用下面的语句后调用.

UICollectionViewLayout *layout = (UICollectionViewLayout *)self.collectionView.collectionViewLayout;
[layout invalidateLayout];
Run Code Online (Sandbox Code Playgroud)

但是,在iOS 7中,即使重新加载CollectionView,也不会调用- applyLayoutAttributes:.

这是一个苹果稍后会修复的错误,或者我必须做些什么?

uicollectionview uicollectionviewcell ios7 xcode5

9
推荐指数
1
解决办法
3786
查看次数

IOS 7 CollectionViewFlowLayout 3D翻译(如新的Safari Tabviewer)

我的问题

我想用CollectionViewFlowLayout实现一个看起来像Safari Pageviewer的CollectionView(见截图)

由于Apple引用了像"z-index"这样的东西,"转换"很容易实现.经过几天的教程和研究后,我无法做到.

我遵循了一些正常的CollectionViewFlowLayout并使其成为CollectionView FlowLayout的子类.现在我尝试了

-(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect
Run Code Online (Sandbox Code Playgroud)

-(void)modifyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
Run Code Online (Sandbox Code Playgroud)

-(UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)

在我尝试给细胞一个3D变换.

但是从未调用layoutAttributesForItemAtIndex(找到了一些解释,但我并没有真正理解它)

并且尝试其他方法也没有用(在细胞上没有可见的3D转换.)

以下是我的尝试,以便您可以看到我尝试过的内容:

//从未调用过这个

-(UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
{

    UICollectionViewLayoutAttributes *attributes =
    [super layoutAttributesForItemAtIndexPath:indexPath];


    [attributes setTransform3D:CATransform3DMakeTranslation(10.0, 20.0, 10.0)];
    attributes.transform3D = CATransform3DMakeScale(1.0, 2.0, 1.0);


    return attributes;
}
Run Code Online (Sandbox Code Playgroud)

//这个被调用,但转换没有按预期工作.

 -(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect
    {

        NSArray *allAttributesInRect = [super
                                        layoutAttributesForElementsInRect:rect];

        for (UICollectionViewLayoutAttributes *cellAttributes in allAttributesInRect)
        {
            cellAttributes.size=CGSizeMake(300, 300);
            cellAttributes.transform3D = CATransform3DMakeScale(1.0, 2.0, 1.0);
            cellAttributes.transform3D = CATransform3DMakeTranslation(1, 200, 100);


               [self modifyLayoutAttributes:cellAttributes];
        }
        return allAttributesInRect;
    }
Run Code Online (Sandbox Code Playgroud)

//这也行不通

-(void)modifyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
{
    if ([layoutAttributes.indexPath isEqual:_currentCellPath])
    { …
Run Code Online (Sandbox Code Playgroud)

objective-c mobile-safari coverflow ios uicollectionviewcell

9
推荐指数
1
解决办法
2490
查看次数

集合视图单元格按钮不触发动作

所以我在集合视图单元格 xib 中有一个看起来像铅笔的按钮。

在此处输入图片说明

然后我有这个代码。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "groupsCollectionViewCellIdentifier", for: indexPath) as! GroupCollectionViewCell

    //add action to the edit button
    cell.editButton.tag = indexPath.row
    cell.editButton.addTarget(self, action: #selector(GroupsCollectionViewController.editGroupAction), for: .touchUpInside)

    return cell
}

//segue to edit group
func editGroupAction() {
    performSegue(withIdentifier: "editGroupSegue", sender: self)
}
Run Code Online (Sandbox Code Playgroud)

但是每当我单击编辑按钮时。什么都没有发生。我想知道缺少什么。

xcode uibutton uicollectionview uicollectionviewcell swift

9
推荐指数
3
解决办法
8939
查看次数

UICollectionView动态单元格高度(Pinterest布局)

我正在尝试在我的应用程序中实现Pinterest布局

我使用以下委托方法来实现它并动态设置单元格高度

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let boundingRect =  CGRect(x: 0, y: 0, width: self.view.frame.size.width / 2 - 20, height: CGFloat(MAXFLOAT))
    let data = articles[indexPath.row]
    let rect  = AVMakeRect(aspectRatio: (data.coverImage?.size)!, insideRect: boundingRect)
    return CGSize(width: rect.width, height: rect.height + 120) // Added 120 for a description I will add later 
}
Run Code Online (Sandbox Code Playgroud)

但是我得到了以下结果:

这里

灰色背景是单元格的背景,你可以看到每个单元格都有自己的高度(正如预期的那样),但是还有额外的空格,我不知道如何删除.

我怎样才能解决这个问题?

pinterest uicollectionviewcell swift

9
推荐指数
1
解决办法
7115
查看次数