【发布时间】:2014-09-04 13:43:54
【问题描述】:
(注意:我使用的 tableView 来自 Parse.com iOS SDK - PFQueryTableViewController)
场景 = 我有一个 TableViewController,它有两种不同类型的单元格(每个都有自己的标识符)。如果对象上的键为真,则在查询并加载到数据源时检查每个对象。根据结果,我将ReusableCellWithIdentifier 出列到正确的单元格。
-(PFTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object {
myTableViewCell *cell;
if ([object[@"orientation"] isEqualToString:@"left"] || [object[@"orientation"] isEqualToString:@"right"]) {
myTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
else {
myTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell2"];
}
这一切都发挥了作用。每个单元格都在正确的 indexPath.row 和所有内容中加载。问题是我的 tableView“行高”本身不会为新单元格重新调整。这会导致单元格重叠并使一切变得丑陋。我可以告诉情节提要中的 tableView 将行高设置为两个单元格高度中较大的一个,但这也会在单元格之间留下很大的空间,这也使它看起来很丑。
问题 = 我认为(如果我错了,请纠正我)我需要使用
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
方法来实现这一点。我需要帮助的地方是我不确定如何根据我在 cellForRowAtIndexPath 方法中为每个单元格提供的“标识符”来设置 indexPath 处每个单元格的高度。
我在寻找什么 = 类似这样的东西(请原谅 SuedoCode)
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if ([cell.identifier isEqual:@"Cell"] {
return 100;
}
else {
return 200;
}
}
回答:我想通了!(我将下面的答案标记为已接受,因为它为我指明了正确的方向)
因为我使用的是 PFQueryTableViewController,所以我必须这样做......
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
PFObject *object = [self.objects objectAtIndex:indexPath.row];
if ([object[@"orientation"] isEqual:@"left"] || [object[@"orientation"] isEqual:@"right"]) {
return 100;
}
else {
return 200;
}
}
【问题讨论】:
-
你在正确的轨道上。您需要“返回 SomeHeight;”,而不是 self.tableView.rowHeight。每一行都会调用此方法,因此您将在所述索引路径处返回所述行的高度。
-
谢谢!我很困惑。我在上面的 我在寻找什么 部分输入的不是可运行的代码。因为您无法通过这种方式检查 cell.identifier 。我的问题是如何那么我该怎么做呢?请原谅不返回任何部分或我的问题。这不是复制和粘贴。我在问题中写了它。我遇到的问题不是因为我的项目中缺少该代码。
-
@TomTesticool,您可以将
cellIdentifier存储在您的模型中,您可以从原始模型中以–tableView:heightForRowAtIndexPath:方法调用它(因为您会调用任何其他信息在–tableView:cellForRowAtIndexPath:方法中构建单元格)。
标签: ios uitableview