UITableView 中的自定义单元格重叠

Posted

技术标签:

【中文标题】UITableView 中的自定义单元格重叠【英文标题】:Custom Cells Overlapping in UITableView 【发布时间】:2014-08-26 02:01:43 【问题描述】:

我有一个名为 GameCell 的自定义单元类,UI 是在情节提要中创建的。当我的细胞加载时,它们会彼此重叠加载。这个问题发生在 cell.clipsToBounds YES 和 NO 上,只是在不同的变体中:

我也试过 [cell setClipsToBounds:(BOOL)] 没有成功。

这是我的 cellForRowAtIndexPath 方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

static NSString *CellIdentifier = @"gameCell";

GameCell *cell = (GameCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];


[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
[cell.contentView.superview setClipsToBounds:NO];
NSLog(@"made a cell");
PFObject *myPartners = [self.games objectAtIndex:indexPath.row];
PFUser *partner = [self.partnerList objectAtIndex:indexPath.row];

// Cell profile image
cell.profileImage.layer.cornerRadius = cell.profileImage.frame.size.width / 2;
cell.profileImage.clipsToBounds = YES;

if([partner objectForKey:@"profilePic"]!=nil)
cell.profileImage.image = [partner objectForKey:@"profilePic"];

else 
    cell.profileImage.image = [UIImage imageNamed:@"smile_green.png"];
 

//Cell indicators
if((int)[myPartners objectForKey:@"sent"]==1)
    cell.myIndicator.image = [UIImage imageNamed:@"arrow_icon_dbl.png"];

else if ([myPartners objectForKey:@"sent"]==0)
    cell.myIndicator.image = [UIImage imageNamed:@"arrow_icon.png"];


cell.partnerName.text = [myPartners objectForKey:@"receiverName"];
cell.gameId = myPartners.objectId;

// Cell drop shadow
[cell.cellView.layer setShadowColor:[UIColor blackColor].CGColor];
[cell.cellView.layer setShadowOpacity:0.5];
[cell.cellView.layer setShadowRadius:2.0];
[cell.cellView.layer setShadowOffset:CGSizeMake(1.0, 1.0)];

// Cell buttons
if([myPartners objectForKey:@"picture"]!=nil) 
            [cell.myPlay setEnabled:NO];
 else 
           [cell.myPlay setEnabled:YES];


return cell;

视图是嵌入在 NavigationController 中的 UITableViewController

【问题讨论】:

看起来您需要为表格视图的行返回更高的高度(使用 rowHeight 属性或委托方法,tableView:heightForRowAtIndexPath:) 检查这可能对你有帮助:***.com/questions/22358831/… 【参考方案1】:

你已经使用了 dequeueReusableCellWithIdentifier:

这样使用

NSString *CellIdentifier = [NSString stringWithFormat:@"Cell %d",indexPath.row];

UITableViewCell *cell=[self.tableView cellForRowAtIndexPath:indexPath];

if (cell == nil)

    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

并检查此链接。

UITableView cell Contents are disappearing and overlapping when scrolled in UITableViewcell?

【讨论】:

【参考方案2】:

您应该确保单元格的高度是您的UITableView 控件的RowHeight

例如,

Cell是从XIB设计的,view的高度是30,那么请确保:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

    return 30.0f;

【讨论】:

【参考方案3】:

在属性检查器中取消Adjust Scroll view insets 选项。

你需要点击视图控制器。

【讨论】:

以上是关于UITableView 中的自定义单元格重叠的主要内容,如果未能解决你的问题,请参考以下文章

UITableview 滚动时有两个不同的自定义单元格重叠

UITableView“dequeueReusableCellWithIdentifier”导致基于单元格内容的动态单元格高度的单元格重叠?

iPhone sdk - UIImageView 重叠问题

更改单元格中的数据后,UITableView 中的自定义单元格将无法正确重新加载

一个 UIViewController 中的自定义单元格 tableview 和默认 UITableView

从多节 UITableView 中的自定义静态单元格中检索标签文本