有人能指出我如何使用UICollectionViewLayout创建类似于Pinterest列布局的界面吗?
我尝试在线搜索,但看起来还没有很多例子.
我已经重载了UICollectionViewFlowLayout一个包含UIImages在每个中的单个水平行滑块UICollectionViewCell.
在重载中UICollectionViewFlowLayout,我将其设置minimumLineSpacing为0以获得之间没有间距UICollectionViewCells.(默认为10px)
如果每个单元格具有相同的宽度,则正确显示0px间距
如果单元格具有更大的宽度,则不再考虑0px,并且应用单元格之间的默认10px.
我试图实现以下方法,但结果相同......
- (CGFloat)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout*)collectionViewLayout
minimumLineSpacingForSectionAtIndex:(NSInteger)section {
return 0.0;
}
Run Code Online (Sandbox Code Playgroud)
UICollectionViewCells不同宽度之间获得0px间距的"技巧"是什么?uicollectionview uicollectionviewcell uicollectionviewlayout
我见过的所有示例都使用补充视图作为页眉或页脚.我需要在流程布局中的每个单元格的上方和/或下方添加标签.
起初我认为我所要做的就是注册一个类以获得类型的补充视图,然后实现collectionViewForSupplementaryElementOfKindAtIndexPath,我会很高兴,但似乎开箱即用的FlowLayout只支持页眉和页脚.
苹果文档似乎暗示更多需要FlowLayout的子类化工作.
因为我不想重做苹果为流程布局所做的工作,并且因为我的单元格大小不同,所以我想扩展Flow Layout以支持每个单元格的supp视图.
我想我应该能够通过继承UICollectionViewFlowLayout来实现这一目标.
但我不知道如何告诉流程布局要求每个单元格的补充视图.只需为supp视图注册一个类,就不会强制布局调用layoutAttributesForSupplementaryViewOfKind.就目前而言,我的子类中永远不会调用它.我想如果我为一个支持视图注册一个类,它应该要求我的部分中的每个项目的视图...这似乎是一个不正确的假设.
我已经看到了一个很棒的自定义布局示例,其中使用NSDictionaries手动管理布局,但我不确定如何将该知识应用于内置流布局.
flowlayout ios ios6 uicollectionviewlayout uicollectionreusableview
我正在UICollectionViewLayout根据客户的设计规范为客户构建定制,以实现他们想要的外观和流程.我遇到的问题涉及我所定位的单元格的大小.
有可能单元格可能有不同的大小,我想要的布局样式需要特定的间距要求,以便单元格不会相互重叠,这意味着-layoutAttributesForItemAtIndexPath:在布局过载期间,我想查看项目大小,以便可以正确设置和使用它们.
我遇到的问题是,似乎UICollectionView依赖于这种方法来设置单元格的大小,因为在我设置属性之前,我用来从单元格中获取大小的任何方法总是会产生一个CGSizeZero.
这是我要设计的东西吗?Storyboard中单元格的大小是不可访问的(至少我目前所知的方法)所以除了使用特定的宽度/高度(仅适用于一个)之外,我无法解决这个问题.两个可能的单元格)来测试和编写布局代码.
最终:你如何获取UICollectionViewCella UICollectionViewLayout在计算中使用的大小?.
编辑:
我尝试了以下方法:
CGRect frame = [[self.collectionView cellForItemAtIndexPath:path] frame];
CGSize size = [[self.collectionView cellForItemAtIndexPath:path] intrinsicContentSize];
CGRect frame = [[[self.collectionView cellForItemAtIndexPath:path] contextView] frame];
Run Code Online (Sandbox Code Playgroud) objective-c ios uicollectionview uicollectionviewcell uicollectionviewlayout
我创建了一个集合视图,我正在将图像加载到其中.问题我正在运行的是当我点击一个单元格来获取它的indexPath.item或indexPath.row时,数字都被搞砸了.单击第一个图像不显示任何内容,单击下一个图像将给我0.点击第三个将给我1,然后单击第二个给我一个2.这在整个视图中都会发生.我必须做错事.这是我的代码:
viewDidLoad中:
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];
layout.sectionInset = UIEdgeInsetsMake(10, 20, 10, 20);
[layout setItemSize:CGSizeMake(75, 75)];
self.images = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 230, self.view.frame.size.width, 200) collectionViewLayout:layout];
self.images.delegate = self;
self.images.dataSource = self;
[self.images registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
[self.view addSubview:self.images];
Run Code Online (Sandbox Code Playgroud)
委托方法:
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return self.imagesGallery.count; //image paths for server
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
cell.layer.borderWidth = 1;
cell.layer.borderColor = [[UIColor whiteColor]CGColor];
UIImageView *image = [[UIImageView alloc]init];
image.image = [UIImage imageWithData:[self.imagesGallery objectAtIndex:indexPath.row]];
image.frame = CGRectMake(0, …Run Code Online (Sandbox Code Playgroud) objective-c ios uicollectionview uicollectionviewcell uicollectionviewlayout
我有一个UICollectionView,它显示一个带有全角列的几行(看起来像UITableView)
我想要实现的是与此类似的东西:

...中间单元格的高度更大。当用户上下滚动时,中间单元格之前和之后的单元格动画返回给定单元格的默认高度。
有人可以概述我应该如何解决这个问题吗?
core-animation ios uicollectionview uicollectionviewcell uicollectionviewlayout
我想在 UICollectionView 中找到部分标题的框架。我对 UITableView 有类似的情况,为此,我能够通过执行以下操作来获得它的 rect:
CGRect rect = [self.tableView rectForHeaderInSection:section];
Run Code Online (Sandbox Code Playgroud)
有没有办法在 UICollectionView 中获得相同的结果?谢谢!
我想在UICollectionview中添加更多单元格?任何人都可以告诉我如何添加加载按钮?我创建的CollectionView工作正常,但我想在像采集观察室底部添加加载更多按钮,这
这是我的收藏视图
#pragma mark <UICollectionViewDataSource>
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 3;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
switch (section) {
case 0: return 66;
case 1: return 123;
}
return 31;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = [indexPath row];
NSUInteger count = [self.stockImages count];
if (row == count) {
//Add load more cell
}
DemoCellView *cell = [collectionView dequeueReusableCellWithReuseIdentifier:[DemoCellView reuseIdentifier] forIndexPath:indexPath];
// Configure the cell
cell.titleLabel.text = [NSString stringWithFormat:@"%ld", (long)indexPath.item + 1];
NSLog(@"%@", self.stockImages[indexPath.item …Run Code Online (Sandbox Code Playgroud) 我正在使用xcode 8.3。我有一个CollectionView。我已经从Web服务下载了图像并将图像放置在每个CollectionView单元中。但是,当我滚动CollectionView时,每个单元格中的图像都在变化。几分钟后,它将显示正确的图像。我已经尝试了许多stackoverflow中可用的解决方案。但我没有得到解决方案。请帮我。
objective-c ios uicollectionview uicollectionviewcell uicollectionviewlayout
在我的应用程序中,我有一个全屏的分页集合视图,每个单元也需要全屏显示,因此集合视图布局的项目大小必须与视图控制器的视图边界大小相同。为此,viewDidLayoutSubviews我只是设置项目大小,并且它按预期工作。当我显示此屏幕时,它viewDidLayoutSubviews被调用3次,并且每次iPhone 7的视图边界尺寸为375.0 x 667.0。该单元的尺寸与预期的相同。
但是,当使用3D Touch窥视和弹出显示此屏幕时,无论是窥视还是弹出,单元格的大小都没有达到预期的大小。viewDidLayoutSubviews被称为4次,具有以下边界大小:
--- peek triggered ---
375.0 x 569.524495677234
375.0 x 569.524495677234
375.0 x 720.821325648415
--- pop triggered ---
375.0 x 667.0
Run Code Online (Sandbox Code Playgroud)
窥视时,集合视图将按预期以全屏方式显示,高度为721,单元格的预期宽度为375,但单元格的高度应为569(当单元格高度为721时)。在弹出时,集合视图的高度将更改达到预期的667,但像元高度仍为569。
我尝试collectionView.layoutIfNeeded()在设置后致电,itemSize但结果是一样的。为什么集合视图不更新此处的单元格大小?
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
print("\(view.bounds.width) x \(view.bounds.height)")
let boundsSize = CGSize(width: Int(view.bounds.width), height: Int(view.bounds.height))
let flowLayout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
if flowLayout.itemSize != boundsSize {
flowLayout.itemSize = boundsSize
collectionView.layoutIfNeeded() //this doens't help
}
}
Run Code Online (Sandbox Code Playgroud) ios uicollectionview uicollectionviewcell uicollectionviewlayout