我在我的应用程序中使用UICollectionView,在单个单元格上使用手势识别器,允许用户"滑开"单元格以显示下面的更多数据.
问题是,我经常在CollectionView中重新加载数据; 因为应用程序每3秒钟左右收到一次更新.当细胞处于滑动过程中时,这会导致不需要的行为,同时可以重复使用集合视图单元.
用户将开始滑动单元格,应用程序将接收更新,reloadData,并且不同的单元格将开始接收手势,并开始滑动.
我已经尝试在幻灯片发生时禁用应用程序的更新,但这导致了应用程序内的其他复杂情况,所以我想知道是否有办法禁用单元格重用,(我最多只有20个单元格,所以我不喜欢我认为性能会大幅下降).
谢谢!
我有一个UICollectionView将图片作为其数据存储区中的元素.
我想将高分辨率pic加载到元素中,只有当它的对应UICollectionViewCell当前显示在屏幕上时.之后,当UICollectionViewCell屏幕关闭时,我想将元素返回UIImage到低分辨率版本.
我的问题是,如何检测UICollectionViewCell屏幕何时关闭?
(我尝试使用该prepareForReuse方法,但我无法预测何时会被调用).
我目前正在使用一段代码,scrollViewDidScroll每次视图滚动时我都会检查self.collectionView.visibleCells以查看哪些单元格已在屏幕上滚动.
这看起来有点开销,我想知道UICollectionViewCell在滚动屏幕的时候是否有自己调用的方法?
ios uicollectionview uicollectionviewcell uicollectionreusableview
如何轻松地创建一个水平滚动集合视图,填充单元格跨越行而不是列向下?
我希望有5列和3行,但当有超过15项时,我希望它滚动到下一页.
这件事我有很多麻烦.
horizontal-scrolling ios uicollectionview uicollectionviewcell swift
从上图我有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) 我有一个位于 tableView 单元格内的 collectionView。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
我有UICollection,其中将有许多学生项目和每个项目内有开关用于录制考勤.我像这样循环遍历所有可见的细胞.
for(attendancecollectionViewCell* cells in [[self collectionView] visibleCells]){
NSLog(@"The switch value : %c",cells.attendanceSwitchLabel.isOn);
}
Run Code Online (Sandbox Code Playgroud)
但是,我想循环遍历所有细胞以便参加,而不仅仅是可见细胞.
我正在尝试在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:.
这是一个苹果稍后会修复的错误,或者我必须做些什么?
我的问题
我想用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
所以我在集合视图单元格 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)
但是每当我单击编辑按钮时。什么都没有发生。我想知道缺少什么。
我正在尝试在我的应用程序中实现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)
但是我得到了以下结果:

灰色背景是单元格的背景,你可以看到每个单元格都有自己的高度(正如预期的那样),但是还有额外的空格,我不知道如何删除.
我怎样才能解决这个问题?
ios ×5
swift ×5
objective-c ×2
coverflow ×1
ios7 ×1
pinterest ×1
uibutton ×1
uitableview ×1
xcode ×1
xcode5 ×1