gpt4 book ai didi

iphone - 旋转 UITableView 时更新 UITableViewCells 时出现问题

转载 作者:行者123 更新时间:2023-12-03 18:51:41 30 4
gpt4 key购买 nike

我在自定义 UITableViewCell 中有一个 UILabel,当设备旋转时,它会调整大小。旋转后需要重新计算此标签中的文本,因为我要将其缩小到适当大小并在末尾附加一些文本。

例如数据模型有:“这是一个需要停止的连续句子。”

在纵向模式下,它会变成“这是连续发送的...更多”

在横向模式下,它变成“这是一个连续的句子......更多”

来自(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation我能够访问可见的 UITableViewCells 并更新描述。

问题似乎是有 UITableViewCells 被缓存但我无法访问。当我在旋转后滚动 UITableView 时,旋转后可见区域下方的一两个单元格的标签中没有正确的文本。因此,它们尚未通过 (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 渲染 - 但它们不是由 [tableViewvisibleCells] 返回(或通过循环所有 View 均通过 [tableView subViews] 返回。

我尝试通过此方法访问“额外”单元格:

for (int index=max + 1; index < max + 3 && index < [cellTypes count]; index++) {
NSIndexPath *updatedPath = [NSIndexPath indexPathForRow:index inSection:0];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:updatedPath];
if (cell == nil) { continue; }
[self updateCellForRotate:cell forRow:index];
}

(其中 max 是从visibleCells返回的最大行)但cell始终为零。

是否有办法刷新 UITableViewCells 的缓存,以便它们不会被重复使用?或者访问它们以便我可以更新它们?

谢谢!

最佳答案

有两件事。第一的。在您的 didRotateFromInterfaceOrientation 方法中,您可以简单地重新加载可见行,如下所示:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation) fromInterfaceOrientation
{
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];

NSLog(@"didRotateFromInterfaceOrientation:%d",fromInterfaceOrientation);
[tableView reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationNone];
}

然后我建议您将 interfaceOrientation 数字或简单的表格宽度添加到出列单元格名称中,这样 tableView 就知道一次旋转中的单元格与那些在另一个。就像这样:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath withType:(NSString *)s_type
{
UITableViewCell *cell = nil;
// add width of table to the name so that rotations will change the cell dequeue names
s_cell = [s_cell stringByAppendingString:[NSString stringWithFormat:@"%@%d",@"Width",(int)tv.bounds.size.width]];

NSLog(@"%@",s_cell);
cell = [tv dequeueReusableCellWithIdentifier:s_cell];
if( cell == nil ) {
cell = [[[UITableViewCell alloc];
initWithFrame:CGRectZero reuseIdentifier:s_cell] autorelease];
}
}

关于iphone - 旋转 UITableView 时更新 UITableViewCells 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3670837/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com