Objective-c – IOS UICollectionview动态更改单元格的高度

Objective-c – IOS UICollectionview动态更改单元格的高度,第1张

概述我正在开展基于收藏视图的项目,根据用户点击特定索引,Numberofitem将被更改并增加. all在我的项目中完美工作,但是我无法根据collection-view中的单元格数设置单元格大小.此外,collectionview将无法通过调整大小来查看所有单元格修复. 这里我附上了所有的形象. 1)故事板视图 2)结果与四个单元格 3)当细胞数增加时 目前,我通过以下代码完成了我的单元格的设置.但 我正在开展基于收藏视图的项目,根据用户点击特定索引,Numberofitem将被更改并增加. all在我的项目中完美工作,但是我无法根据collection-vIEw中的单元格数设置单元格大小.此外,collectionvIEw将无法通过调整大小来查看所有单元格修复.
这里我附上了所有的形象.

1)故事板视图

2)结果与四个单元格

3)当细胞数增加时

目前,我通过以下代码完成了我的单元格的设置.但是我想设置,如果在集合视图中有四个单元格,则每个单元格的大小将根据收藏视图和设备大小增加并适合(iphone 5s,iphone 6,iphone 6plus)

这是我的尝试,

-(CGfloat)collectionVIEw:(UICollectionVIEw *)collectionVIEw layout:(UICollectionVIEwLayout *)collectionVIEwLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section{    return 5.0;}-(CGfloat)collectionVIEw:(UICollectionVIEw *)collectionVIEw layout:(UICollectionVIEwLayout *)collectionVIEwLayout minimumlinespacingForSectionAtIndex:(NSInteger)section{    return 5.0;}- (CGSize)collectionVIEw:(UICollectionVIEw *)collectionVIEw              layout:(UICollectionVIEwLayout *)collectionVIEwLayout  sizeforItemAtIndexPath:(NSIndexPath *)indexPath{        ////@property NSInteger count;//// if (_count == 0)  {    //  wIDth = ((wIDth - (span*5))/4);    //        return CGSizeMake(self.vIEw.frame.size.wIDth/4,self.vIEw.frame.size.height/4);    return CGSizeMake(self.vIEw.frame.size.wIDth/2.5,self.vIEw.frame.size.height/5);}if (_count == 1 || _count == 2){    return CGSizeMake(self.vIEw.frame.size.wIDth/2.5,self.vIEw.frame.size.height/5);    // return CGSizeMake(100.0,100.0);}if (  _count == 3 || _count == 4 || _count == 5){    // return CGSizeMake(100.0,100.0);    return CGSizeMake(self.vIEw.frame.size.wIDth/3.5,self.vIEw.frame.size.height/6.5);}if (  _count == 6 || _count == 7 || _count == 8 || _count == 9){    //return CGSizeMake(90.0,90.0);    return CGSizeMake(self.vIEw.frame.size.wIDth/4,self.vIEw.frame.size.height/8);}if (  _count == 10 || _count == 11 || _count == 12 || _count == 13 || _count == 14){    //  return CGSizeMake(80.0,80.0);    return CGSizeMake(self.vIEw.frame.size.wIDth/4,self.vIEw.frame.size.height/8);}if (  _count == 15 || _count == 16 || _count == 17 || _count == 18 || _count == 19 || _count ==20){    //return CGSizeMake(70.0,70.0);    return CGSizeMake(self.vIEw.frame.size.wIDth/4.75,self.vIEw.frame.size.height/9.5);}if (_count ==21 || _count == 22 || _count == 23 || _count == 24 || _count == 25 || _count == 26 || _count == 27) {    // return CGSizeMake(60.0,60.0);    return CGSizeMake(self.vIEw.frame.size.wIDth/6,self.vIEw.frame.size.height/12);}if (_count ==28 || _count == 29  ) {    //  return CGSizeMake(50.0,50.0);    return CGSizeMake(self.vIEw.frame.size.wIDth/6.25,self.vIEw.frame.size.height/12.5);}else    return CGSizeMake(0,0);}- (NSInteger)collectionVIEw:(UICollectionVIEw *)collectionVIEw numberOfItemsInSection:(NSInteger)section{return itemincollectionvIEw.count;}

注意:-
我也尝试过这个方法.

- (voID)vIEwDIDLayoutSubvIEws  {    self.automaticallyAdjustsScrollVIEwInsets = NO;    [self.collectionVIEw layoutIfNeeded];    NSArray *visibleItems = [self.collectionVIEw indexPathsForVisibleItems];    NSIndexPath *currentItem = [visibleItems objectAtIndex:0];    NSIndexPath *nextItem = [NSIndexPath indexPathForItem:_setRandomIndex inSection:currentItem.section];    [self.collectionVIEw scrollToItemAtIndexPath:nextItem atScrollposition:UICollectionVIEwScrollpositionNone animated:YES]; } - (voID)vIEwWillLayoutSubvIEws {    [super vIEwWillLayoutSubvIEws];    [self.collectionVIEw.collectionVIEwLayout invalIDateLayout]; } -(voID)vIEwWillAppear:(BOol)animated {     [super vIEwWillAppear:YES];     [self.vIEw layoutIfNeeded]; }
解决方法 据我所知,你想复制 this测试的布局.

您需要更好地了解UICollectionVIEw的工作原理,如here

您将必须更改此代理方法中的UICollectionVIEw中的项目数量:

- (NSInteger)numberOfItemsInSection:(NSInteger)section;

在这里,你想在测试开始时返回4,然后是4 * 2,4 * 2 * 2,依此类推.这将给你正确的项目数量.

然后布局.您应该有多个值,因为您不需要元素之间的距离与开始和结束相同的空间.随着物品数量的增加,我会去减少空间.

您需要注意间距,因为它可能导致单元格被强制在下一行

你已经做了很好的工作,通过划分框架获得最大的高度&细胞的宽度,但你的

- (CGSize)collectionVIEw:(UICollectionVIEw *)collectionVIEw              layout:(UICollectionVIEwLayout *)collectionVIEwLayout  sizeforItemAtIndexPath:(NSIndexPath *)indexPath

方法真的很杂乱

由于您的UICollectionVIEw中不会有无限数量的项目,因此您可以使用switch语句,并在每个开关中返回单元格的计算CGSize.

例如,您可以使用它:

switch (numberOfHorizontalitems) {      case 2:            return CGSizeMake(self.collectionVIEw.frame.size.wIDth/2.5,self.collectionVIEw.frame.size.wIDth/2.5);                break;    case 4:                return CGSizeMake(self.collectionVIEw.frame.size.wIDth/4.5,self.collectionVIEw.frame.size.wIDth/4.5);                break;    case 8:                CGSizeMake(self.collectionVIEw.frame.size.wIDth/8.5,self.collectionVIEw.frame.size.wIDth/8.5);                break;(And so on)      default:                break;        }

您应该注意,这里显示的计算出的CGSize必须包含项之间的间距/合并

您也不需要vIEwWillLayoutSubvIEws和vIEwDIDLayoutSubvIEws,您只需要在用户点击单元格时(或在用户点击单元格后处理逻辑的方法中)调用[self.collectionVIEw reloadData]

最后,如果你不想UICollectionVIEw是可滚动的,只需设置属性self.collectionVIEw.scrollEnabled = NO;

总结

以上是内存溢出为你收集整理的Objective-c – IOS UICollectionview动态更改单元格的高度全部内容,希望文章能够帮你解决Objective-c – IOS UICollectionview动态更改单元格的高度所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1247360.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存