
这里我附上了所有的形象.
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动态更改单元格的高度所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)