Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITableViewCell需要重新加载数据()才能将大小调整到正确的高度_Ios_Uitableview_Ios8_Resize_Storyboard - Fatal编程技术网

Ios UITableViewCell需要重新加载数据()才能将大小调整到正确的高度

Ios UITableViewCell需要重新加载数据()才能将大小调整到正确的高度,ios,uitableview,ios8,resize,storyboard,Ios,Uitableview,Ios8,Resize,Storyboard,我有一个带有应用约束的自定义tableview单元格,但第一次显示表格时,除非创建新单元格,否则行高的大小不会正确调整,有没有办法在不再次调用重载数据的情况下执行此操作?是。这实际上是一个自我调整的问题,您需要解决这个问题,直到它被修复 问题是,当一个单元格被实例化时,它的初始宽度是基于情节提要宽度的。由于这与表格视图的宽度不同,初始布局错误地确定了内容实际需要多少行 这就是为什么第一次内容大小不正确,但在您(重新加载数据或)将单元格从屏幕上滚动到屏幕上后,内容会正确显示的原因 您可以通过确保单

我有一个带有应用约束的自定义tableview单元格,但第一次显示表格时,除非创建新单元格,否则行高的大小不会正确调整,有没有办法在不再次调用重载数据的情况下执行此操作?

是。这实际上是一个自我调整的问题,您需要解决这个问题,直到它被修复

问题是,当一个单元格被实例化时,它的初始宽度是基于情节提要宽度的。由于这与
表格视图的宽度不同,初始布局错误地确定了内容实际需要多少行

这就是为什么第一次内容大小不正确,但在您(重新加载数据或)将单元格从屏幕上滚动到屏幕上后,内容会正确显示的原因

您可以通过确保单元格的宽度与
tableView
宽度匹配来解决此问题。您的初始布局将是正确的,无需重新加载tableView:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    [cell adjustSizeToMatchWidth:CGRectGetWidth(self.tableView.frame)];

    [self configureCell:cell forRowAtIndexPath:indexPath];

    return cell;
}
在TableViewCell.m中:

- (void)adjustSizeToMatchWidth:(CGFloat)width
{
    // Workaround for visible cells not laid out properly since their layout was
    // based on a different (initial) width from the tableView.

    CGRect rect = self.frame;
    rect.size.width = width;
    self.frame = rect;

    // Workaround for initial cell height less than auto layout required height.

    rect = self.contentView.bounds;
    rect.size.height = 99999.0;
    rect.size.width = 99999.0;
    self.contentView.bounds = rect;
}
我还建议你去看看斯迈利堡的,还有他的。这就是当我遇到你遇到的同一个问题时,给我提供解决方案的线索

更新:

configureCell:forrowatinexpath:
是苹果在其示例代码中使用的一种方法。当您有多个
tableViewController
时,通常会对其进行子类化,并在每个视图控制器中分解控制器特定的
cellForRowAtIndexPath:
代码。超类处理公共代码(如出列单元格),然后调用子类,以便配置单元格的视图(根据控制器的不同而有所不同)。如果不使用子类化,只需将该行替换为特定代码即可设置单元格的(自定义)属性:

    cell.textLabel.text = ...;
    cell.detailTextLabel.text = ...;

是否在RowAtIndexPath代理的高度中返回了正确的高度?发布一些代码。@RamarajT我正在使用rowHeight属性thanxs作为响应!!我使用的是ios8,可以让这行工作[self-configureCell:cell-forrowatinexpath:indexPath];我更新了我的答案来解释这句话。如果不将
UITableViewController
子类化并调用其超类,则不需要使用任何类似的方法。真正重要的是,一旦您在设置标签或其他自定义控件之前设置了单元格的宽度,该单元格将能够在最初正确地自行调整大小。尝试了您的解决方案,但没有成功,它与ios8版本有关系吗?@Angie你想支持哪个版本?它在8.4中可以正常工作。当初始布局不正确时,这是因为单元格宽度错误,从而导致标签最初布局错误。(重新加载后,单元格的宽度是正确的,因此布局是正确的。)确保在
cellforrowatinedexpath
或自定义单元格的代码中设置单元格的宽度(就像我所做的那样),您应该会很好。