怎么解决uicollectioncell xibViewCell视图重叠

UICollectionView头视图重叠 - 简书
<div class="fixed-btn note-fixed-download" data-toggle="popover" data-placement="left" data-html="true" data-trigger="hover" data-content=''>
写了3424字,被7人关注,获得了11个喜欢
UICollectionView头视图重叠
UICollectionReusableView
自定义集合视图的头/尾视图时容易出现重叠的情况,尤其文字显示的时候,明显重叠了。(我差点被这个问题折磨死)
1. 产生问题的原因:
出现重叠情况的代码如下:
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, M_SIZE.width, M_SIZE.height / 14)];
label.textAlignment = NSTextAlignmentC
[headerView addSubview:label];
每次调用设置头视图的方法时,都会重新alloc一个label,所以会有叠加的效果。
2. 解决方法:(before)
当初的解决方法是:每次设置HeaderView时,把这个label(或者自己添加到HeaderView上的其他控件)删除。这样多次add,多次remove,肯定会影响运行速率的,不推荐使用。代码如下所示:// 第一种方法:
for (UIView *view in headerView.subviews) { [view removeFromSuperview]; }
// 第二种方法:
[view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
3. 解决方法(now)
自定义一个头视图/ 尾视图的类,继承于:UICollectionReusableView (也就相当于自定义view,一个可重用的view),然后在这个类的初始化方法中,添加你需要在头视图/ 尾视图显示的控件,这样创建出的头视图/尾, 在使用的时候就不会存在叠加的情况了。简单示例代码:
-(instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor colorWithRed:230 / 255.0 green:230 / 255.0 blue:230 / 255.0 alpha:1.0];
_titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, M_SIZE.width, M_SIZE.height / 14)];
_titleLabel.textAlignment = NSTextAlignmentC
[self addSubview:_titleLabel];
如果出现什么特殊情况,请通知我~
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:iOS UICollectionView
iOS UITableView(7)
//在cellForItemAtIndexPath:方法里一个合适的位置加上:
for (UIView * viewin cell.contentView.subviews)
& & & & & & [view removeFromSuperview];
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7573次
排名:千里之外
原创:18篇
转载:12篇Pages: 1/2
主题 : 关于UICollectionViewCell的问题
级别: 新手上路
UID: 203073
可可豆: 298 CB
威望: 212 点
在线时间: 1293(时)
发自: Web Page
来源于&&分类
关于UICollectionViewCell的问题&&&
开发用到了UICollectionView,但是制定cell的时候,因为cell有多种样式,所以不希望重用cell。但是在方法- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{&&&&AddCustomerCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:nil forIndexPath:indexPath];}中只有这一个方法。(cell 是自定义的一个cell)。而且手动调用- (id)initWithFrame:(CGRect)frame会报错Terminating app due to uncaught exception &#39;NSInternalInconsistencyException&#39;, reason: &#39;the view returned from -collectionView:cellForItemAtIndexPath: (&NSIndexPath: 0xcb51300& {length = 2, path = 0 - 0}) was not retrieved by calling -dequeueReusableCellWithReuseIdentifier:forIndexPath: or is nil (&AddCustomerCell: 0xcb30580; baseClass = UICollectionViewC frame = (0 0; 350 110); clipsToBounds = YES; opaque = NO; autoresize = RM+TM; layer = &CALayer: 0xcb33970&&)&#39;求解,如何不重用Cell !!
级别: 新手上路
UID: 203073
可可豆: 298 CB
威望: 212 点
在线时间: 1293(时)
发自: Web Page
各位大牛出来解答下吧~~
级别: 新手上路
UID: 292043
可可豆: 83 CB
威望: 30 点
在线时间: 173(时)
发自: Web Page
你居然不要重用,那你把Cell 视图 直接添加到UIScrollView上吧&&&& 我是小菜&& 建一个float数组记录下Cell视图的起始点坐标, 之后往UIScrollView 上加&&这样就没重用了&& 希望可以帮到你
级别: 新手上路
UID: 203073
可可豆: 298 CB
威望: 212 点
在线时间: 1293(时)
发自: Web Page
回 2楼(我就是小二) 的帖子
谢谢,这也是一个办法,不过我先等等看有没有可以不用重用的方法,因为我现在这个已经写了不少了,突然发现了这个蛋疼的问题。。。因为是第一次用UICollectionView,所以很多东西不知道...
级别: 新手上路
UID: 271306
可可豆: 116 CB
威望: 75 点
在线时间: 42(时)
发自: Web Page
可不可以用静态的Cell,不过这个要在故事板才可以用的,你用了故事板吗?
级别: 新手上路
UID: 263584
可可豆: 8 CB
威望: 10 点
在线时间: 199(时)
发自: Web Page
你可以根据不同的数据制定不同的cell,在- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath返回数据需要的 在- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath返回数据需要的cell可否?
级别: 禁止发言
可可豆: 443 CB
威望: 416 点
在线时间: 1091(时)
发自: Web Page
用户被禁言,该主题自动屏蔽!
级别: 新手上路
UID: 64791
可可豆: 102 CB
威望: 79 点
在线时间: 95(时)
发自: Web Page
dequeueReusableCellWithReuseIdentifier:nil 你可以加不同的reuseridentifier的cell,根据数据用不同reuseridentifier定义的数据就好了
级别: 新手上路
可可豆: 2 CB
威望: 2 点
在线时间: 19(时)
发自: Web Page
回 6楼(lipeng930307) 的帖子
请问你的问题解决了嘛?&&我也遇到同样的问题。
级别: 禁止发言
可可豆: 443 CB
威望: 416 点
在线时间: 1091(时)
发自: Web Page
用户被禁言,该主题自动屏蔽!
Pages: 1/2
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版IOS--系统方法(77)
问题描述:最后一个cell上会叠加一个类&#20284;于支付宝的新字图标在cell的左上角。当点击其它cell时,这个新字图标会在其它cell上重叠显示。
第一种方法:设置cell的frame (如下红色代码),然后 &[self.collectionView
reloadData];
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath
*)indexPath
& & static
NSString *identify = @&cell&;
& & CHCollectionViewCell *cell = [collectionView
dequeueReusableCellWithReuseIdentifier:identify
forIndexPath:indexPath];
& & [cell sizeToFit];
& & if (!cell)
& & & & cell = [[CHCollectionViewCell
alloc] initWithFrame:CGRectMake(0,0,
(UISCREENWIDTH)/CELLCOUNTEVERYLINE, (UISCREENWIDTH)/CELLCOUNTEVERYLINE)]
第二种方法:单独加在这个cell
& & & & & & &NSIndexPath *indexPaths = [NSIndexPath
indexPathForRow:8
inSection:0];
&& & & & & & [UIView
performWithoutAnimation:^{
&& & & & & & & & [self.collectionView
reloadItemsAtIndexPaths:@[indexPaths]];
&& & & & & & }];
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:174670次
积分:4975
积分:4975
排名:第4233名
原创:313篇
转载:199篇
(15)(2)(18)(1)(17)(13)(23)(1)(12)(12)(4)(21)(12)(17)(13)(18)(19)(10)(7)(14)(12)(3)(8)(7)(6)(10)(24)(7)(8)(25)(11)(15)(18)(18)(22)(20)(13)(28)(4)(3)}

我要回帖

更多关于 uicollectioncell间距 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信