重新加载 uitableview 从第二行开始(或不在第一行)
Posted
技术标签:
【中文标题】重新加载 uitableview 从第二行开始(或不在第一行)【英文标题】:reloading a uitableview starts at the 2nd row (or not at the first row) 【发布时间】:2013-05-02 02:04:42 【问题描述】:再次出现 Utableview 问题。每当我重新加载数据时,表格视图都会重新加载,但数据似乎不会从第一行开始。请参考下图。
我在重新加载数据后尝试了以下方法,但仍然没有成功:
[self.tableView reloadData];
// this or the other one ... [self.tableView setContentOffset:CGPointZero animated:NO];
[self.tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
这就是我在 viewdidload 上定位 uitableview 的方式
self.tableView.frame = CGRectMake(450, 20, self.tableView.frame.size.width, self.tableView.frame.size.height - 20);
编辑 1:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"SearchResultCell";
User *user = [users objectAtIndex:indexPath.row];
UserTableCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil)
cell = [[UserTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.name.text = [NSString stringWithFormat:@"%@ %@", user.firstName, user.lastName];
return cell;
【问题讨论】:
cellForRowAtIndexPath: 是什么样子的? 用 cellForRow 更新 啊,我的错,误读了问题。 我建议滚动到 0,0 然后重新加载 - 除非您有特定的理由不这样做。此外,由于您正在处理 UIScrollView 子类,您只需将 contentOffset 设置为 CGPointZero。 【参考方案1】:根据您的 cmets,当您将设备旋转到横向模式时,您的表格大小调整不正确。在情节提要中,您需要在表格视图上设置自动调整大小,以便它以您想要的方式正确调整大小。
这是一个很好的起点:
注意在Autosizing
标签上方,它显示了一堆红色条(称为弹簧和支柱)。我将它们全部打开,这将保持与超级视图边缘的距离并允许对象更改其大小以保持这些距离相同。这应该接近你想要的,如果不是,那么你可以尝试不同的组合,直到你得到你想要的。
您可以通过单击红线来打开和关闭它的每个部分。
更多详情请看这个问题:Autoresizing masks programmatically vs Interface Builder / xib / nib
【讨论】:
重新加载后会这样吗?甚至在 viewdidload 上? 是的,在重新加载而不是调用 scrollRectToVisible 之后。 hmm.. 试过了,效果还是一样。此外,知道我取出了自动布局可能会有所帮助。 尝试添加 NSLog("%@", self.tableView);并查看重新加载数据后的帧是什么。 好的,请注意您的框架已更改为 -57 的 y 位置。这就是为什么您看不到桌子顶部的原因。我猜这是因为您的自动调整大小掩码(您的日志显示 TM+BM)。我敢打赌,如果您将模拟器/设备的方向更改为纵向,它看起来会很好。以上是关于重新加载 uitableview 从第二行开始(或不在第一行)的主要内容,如果未能解决你的问题,请参考以下文章
重新加载 UITableView 有 UITableViewCell 可见性问题
python脚本 从第二行开始读取 文件读取 跳过第一行 跳过前几行