具有动态数据初始化的 UiTableviewCell 未正确加载
Posted
技术标签:
【中文标题】具有动态数据初始化的 UiTableviewCell 未正确加载【英文标题】:UiTableviewCell with dynamic data init not loading correctly 【发布时间】:2017-11-02 10:19:01 【问题描述】:在我的单元格中,数据正在加载,但在我向下滚动之前它都一团糟,然后如果我正确地向后滚动所有格式。因此,当我加载的每个 uitableview 数据列表都被弄乱时,一旦我开始滚动并向上滚动,它就会就位并正确显示。请帮忙。
我的代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
for(UIView *v in [cell subviews])
if([v isKindOfClass:[UILabel class]])
[v removeFromSuperview];
if ([v isKindOfClass:[UIImageView class]])
[v removeFromSuperview];
UIView *CellBGView = [[UIView alloc] initWithFrame:CGRectMake(10, 5, cell.frame.size.width-20, cell.frame.size.height-10)];
CellBGView.backgroundColor = [UIColor whiteColor];
UIImageView *divider = [[UIImageView alloc] initWithFrame:CGRectMake(CellBGView.frame.size.width-155, CellBGView.frame.size.height-140, 150, 150)];
divider.image = [UIImage imageNamed:@"icon_alpha.png"];
[CellBGView addSubview:divider];
......
return cell;
当我打开列表和滚动表格之前,这里会输出
这里是滚动后一切就位
【问题讨论】:
您应该使用自定义单元格,而不是标准单元格,并在情节提要中配置布局。而且你真的需要重新阅读 Apple 关于 TableViews 和 TableViewCells 的文档。 为什么要删除cellForRowAtIndexPath
中的UILabel
和UIImage
?
如果你不重用子视图,在cellForRowAtIndexPath
中添加子视图是不合适的。每次用户滚动表格视图时,都会将更新和更新的分配视图添加到单元格中。从您的代码 sn-p 中,每次用户滚动时,CellBGView
和 divider
将被分配并添加为子视图。
@trungduc 删除以避免重复
【参考方案1】:
我有一个解决方案。
首先,创建UITableViewCell
的子类(例如,命名为DemoTableViewCell
)
在DemoTableViewCell
的initWithStyle
方法中,将图像和标签添加到单元格中。
在cellForRowAtIndexPath
中,您不需要添加或删除图像和标签。只需为它们更改颜色或设置图像即可。
【讨论】:
以上是关于具有动态数据初始化的 UiTableviewCell 未正确加载的主要内容,如果未能解决你的问题,请参考以下文章