我有一个 UITableView,其单元格仅包含可变高度的图像,我根据图像动态设置行高,它不能完美工作,滚动时的图像有时会重叠。这是代码...
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [artistfeeds count];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell=[self.newsTableView dequeueReusableCellWithIdentifier:@"artistFeedCell"];
UIImageView *imgView=[[UIImageView alloc]initWithImage:((ESArtistFeedObject*)[artistfeeds objectAtIndex:indexPath.section]).image];
[cell.contentView addSubview:imgView];
[cell.contentView sizeToFit];
return cell;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
CGFloat height=((ESArtistFeedObject*)[artistfeeds objectAtIndex:indexPath.section]).image.size.height;
NSLog(@"section: %i, image height: %f",indexPath.section,height);
return height;
}
-(void)artistFeedFound:(NSNotification*)notification
{
//NSLog(@"%@",[notification userInfo]);
artistfeeds=[[NSMutableArray alloc]init];
if([[[[notification userInfo]objectForKey:@"artistfeed"]objectForKey:@"artist"] isKindOfClass:[NSArray class]])
{
for(NSDictionary *tempDict in [[[notification userInfo]objectForKey:@"artistfeed"]objectForKey:@"artist"])
{
ESArtistFeedObject *artistFeed=[[ESArtistFeedObject alloc]init];
artistFeed.name=[tempDict objectForKey:@"name"];
artistFeed.type=[tempDict objectForKey:@"postType"];
artistFeed.desc=[tempDict objectForKey:@"postDesc"];
if(![artistFeed.type isEqualToString:@"photo"])
artistFeed.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://c0364947.cdn2.cloudfiles.rackspacecloud.com/%@",[tempDict objectForKey:@"artist_image"]]]]];
else
artistFeed.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[tempDict objectForKey:@"photo"]]]];
[artistfeeds addObject:artistFeed];
}
}
[self.newsTableView reloadData];
}
有什么建议么?
您缺少 cellForRowAtIndexPath 中的代码,该代码在没有可重用的单元格时实际创建单元格。
//assuming there is a class property `int cellImageTag = 100;`
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell=[self.newsTableView dequeueReusableCellWithIdentifier:@"artistFeedCell"];
UIImageView *imgView;
if(cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"artistFeedCell"];
imgView = [[UIImageView alloc] init];
imgView.tag = cellImageTag;
[cell.contentView addSubview:imgView];
}
else
{
imgView = [cell.contentView viewWithTag:cellImageTag];
}
imgView.image = ((ESArtistFeedObject*)[artistfeeds objectAtIndex:indexPath.section]).image;
[cell.contentView sizeToFit];
return cell;
}
edit:错过了关于故事板的评论
edit2:我认为这是由于您每次加载单元格时创建并添加新的 UIImageView 子视图造成的。我不确定故事板如何处理单元格的重用,但一般来说,您的类将有一个标签 ivar 或常量来跟踪您想要在单元格中重用的视图的标签。以更新我的代码为例。
edit3:下面的代码应该适用于故事板
//assuming there is a class property `int cellImageTag = 100;`
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell=[self.newsTableView dequeueReusableCellWithIdentifier:@"artistFeedCell"];
UIImageView *imgView = [cell.contentView viewWithTag:cellImageTag];
if(!imgView)
{
imgView = [[UIImageView alloc] init];
imgView.tag = cellImageTag;
[cell.contentView addSubview:imgView];
}
imgView.image = ((ESArtistFeedObject*)[artistfeeds objectAtIndex:indexPath.section]).image;
[cell.contentView sizeToFit];
return cell;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)