关于uicollectionview横向问题,有没有人解答

在使用UICollectionView碰到的诡异问题,
赤果果丶2407
重用机制,生成的最多cell个数基本上就是等于你的最大屏幕行数+1 那么你的 [cell initCustomItemView] 方法就不应该放在cell 的init 或者initWithFrame里 可以作为一个单独的方法提出来,在 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ 里调用
为您推荐:
其他类似问题
扫描下载二维码8792人阅读
iOS开发(40)
手机开发(10)
近来偶尔用到UICollectionView,对于九宫格之类的布局还是很方便的。但使用过程中却出现一个奇怪的问题,暂时没时间仔细研究。先记录。
在UICollectionViewCell中定义一个图标和一个文本,显示的效果是典型的九宫格。默认会有几条数据,点击最后一个cell会弹出编辑框添加自定义的cell。使用过程中出现的问题时,在第二行最后一个添加的自定义cell,图标怎么都改变不了。如果将整个view切换一下,显示又变成正常了。如下图:
查看打印出来的数据,是正常的。如下:
index = 0;
name = &\U&;
thumb = &sunset_btn_nor&;
index = 1;
name = &\U665a\U9910&;
thumb = &dinner_btn_nor&;
index = 2;
name = &\U770b\U&;
thumb = &tv_btn_nor&;
index = 3;
name = &\U6e29\U548c&;
thumb = &soft_btn_nor&;
index = 4;
name = &\U51b7\U5149&;
thumb = &coldlight_btn_nor&;
index = 5;
thumb = &my_btn_nor&;
index = 6;
thumb = &my_btn_nor&;
index = 7;
thumb = &my_btn_nor&;
index = 8;
name = &\U81ea\U5b9a\U4e49&;
thumb = &add_btn_nor&;
添加断点,发现数据也没有问题。代码的处理方式是在插入或者更新数据后,调用
[collectionView
reloadData];
网上搜索,也看到有人问类似的问题。有些人给出的解决办法是加一个空的UIView在上面,强制整个collection view刷新。但感觉不是好的办法。
后来试了更新指定项,问题就不出现了。
以下两种方法均有效:
[self.collectionViewreloadItemsAtIndexPaths:@[[NSIndexPathindexPathForRow:7inSection:0]]];
[self.collectionViewreloadSections:[NSIndexSetindexSetWithIndex:0]];
至于为什么reloadData会无效。这个暂时留下,等有空的时候再研究一下其原理。或者有牛人知道也请不吝赐教。
另外,这情况也提醒我们,能确定加载某个子项的,还是调用直接刷新指定项更好。一来效率高,二来避免出现莫名其妙的现象。
==================
昨天的问题补充一下。发现不是reloadData的问题。后来在测试中,使用reloadSections也会出现问题。
跟踪了一下,发现在reloadData过程中,最后一个(也就是新增加)的一个cell没有调用layoutSubviews。因为是在layoutSubviews中改变custom cell的image和label的值,所以新增加的cell没有刷新。后来换成了在赋值过程中调用更新image和label的代码,这样无论reloadData和reloadSections都有效了,因为这样保证了加载数据的时候imageView和label都被调用。或者也可以在cellForRowAtIndexPath中调用[cell
setNeedsLayout];去强制调用layoutSubviews,这样也达到更新的效果。
但是有点比较奇怪的是,之前的uitableview和uicollectionview自定义cell都是在layoutSubviews里面更新对应的控件,却没出现过问题。是不是iOS7以后,加载的机制发生变化了。这个有待进一步研究。
今天查找资料的时候,顺便收集了一个图表,图表清楚说明了会引起调用layoutSubviews的操作。(x表示被调用)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:518969次
积分:4857
积分:4857
排名:第3547名
原创:67篇
转载:22篇
评论:169条
(1)(2)(1)(1)(1)(1)(1)(2)(1)(2)(1)(2)(1)(1)(2)(3)(1)(2)(4)(1)(6)(1)(1)(3)(1)(4)(1)(1)(3)(1)(3)(3)(5)(2)(1)(8)(2)(2)(6)(1)(1)(1)(1)在使用UICollectionView碰到的诡异问题,求解答
kfhiu00A20
重用机制,生成的最多cell个数基本上就是等于你的最大屏幕行数+1 那么你的 [cell initCustomItemView] 方法就不应该放在cell 的init 或者initWithFrame里 可以作为一个单独的方法提出来,在 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ 里调用
为您推荐:
其他类似问题
扫描下载二维码UICollectionView高级进阶篇 - 庞海礁的个人空间
转载请注明出处:
HI,亲爱读者朋友们,又到了博客更新的时间,在经历了大半年的沉淀,目前博客日访问人次已突破400大关,最高峰达到2600人次,非常感谢各位朋友的来访,在以后的博客中争取为大家带来更多的干货。各位朋友如果有好的文章或者题材都可以推荐给我,有什么想了解的知识,都可以在下面跟我留言,或者@
在聊完几次理论后,今天给大家带来一篇关于UI的文章,看标题大家已经知道了,没错,就是大家所熟悉的UICollectionView。说起github上赫赫有名的卡片展示视图,大多数iOS开发人员或多或少都有听过或使用过,其丰富的展示样式经常出现在某些APP的一级路径,其实,苹果公司针对卡片样式祭出了自己的解决方案——UICollectionView
废话少说,先上干货
看完GIF展示的效果,各位是否已经蠢蠢欲动,这不就是视图嘛,没错!但是今天我们采用UICollectionView实现这些效果。平常开发中,最熟悉的莫过于UICollectionViewFlowLayout,其实UICollectionViewFlowLayout相当于苹果提前定义的一个特殊UICollectionViewLayout。
先看看UICollectionViewLayout类的官方文档(好吧,原谅我半天打不开苹果网址,最近敏感期,各种和谐),还是直接看代码吧,总之,自定义UICollectionViewLayout,必须实现以下几个函数
collectionViewContentSize
layoutAttributesForElementsInRect:
layoutAttributesForItemAtIndexPath:
layoutAttributesForSupplementaryViewOfKind:atIndexPath: (if your layout supports supplementary views)
layoutAttributesForDecorationViewOfKind:atIndexPath: (if your layout supports decoration views)
shouldInvalidateLayoutForBoundsChange:
看函数名就可以知道各个函数实现的功能:第一个定位View的contentSize,第二个函数定义屏幕展示的范围和数量,第三个定义cell的布局,第四个和第五个是可选项,定义SupplementaryView以及DecorationView的布局,最后一个定义是否重新布局
UICollectionViewLayout的精髓在于你可以定义每个cell的UICollectionViewLayoutAttributes属性,包括
@property (nonatomic) CGR
@property (nonatomic) CGP
@property (nonatomic) CGS
@property (nonatomic) CATransform3D transform3D;
@property (nonatomic) CGRect bounds NS_AVAILABLE_IOS(7_0);
@property (nonatomic) CGAffineTransform transform NS_AVAILABLE_IOS(7_0);
@property (nonatomic) CGF
@property (nonatomic) NSInteger zI // default is 0
@property (nonatomic) CGR@property (nonatomic) CGP@property (nonatomic) CGS@property (nonatomic) CATransform3D transform3D;@property (nonatomic) CGRect bounds NS_AVAILABLE_IOS(7_0);@property (nonatomic) CGAffineTransform transform NS_AVAILABLE_IOS(7_0);@property (nonatomic) CGF@property (nonatomic) NSInteger zI // default is 0
通过定义transform3D属性可以实现视图的旋转、放大以及透视等效果,具体实现参考
在这里格外需要强调的一点,那就是page属性,当滑动停止时,希望UICollectionView滑动到卡片的中心,而不是任意位置
UICollectionViewLayout定义函数
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
其中 ,proposedContentOffset为系统期望滑动到的位置,velocity为加速度,你可以通过这两个参数以及当前所在的位置计算出你希望它滑动到的位置,具体算法根据需求的不同来实现
有用过我们天天动听iOS客户端或者QQ音乐的朋友,可能都非常熟悉这个动画效果,天天动听的推荐页面以及QQ音乐的电台界面,是不是就这样,嘿嘿!重要的事说三遍,赶快下载天天动听客户端,跟我们一起摇摆起来~~~
说完View,接下来聊聊Controller,谈什么了?谈谈它们之间的关系,最近业界对设计模式的话题讨论比较热烈,MVC、MVVM、MVP等等,不知道各位在实际开发中一般使用什么样的设计模式,有什么好的想法都可以在下面留言,下期再见!
Theme | Powered by

我要回帖

更多关于 uicollectionview用法 的文章

 

随机推荐