Как избавиться от нежелательных пробелов при свертывании TableViewCell - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть UITableView с ячейками, которые раскрываются / сворачиваются, когда пользователи нажимают на них, используя:

-(void)tableView:(UITableView *)_tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  ...
  [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
  ...
}

После запуска reloadRowsAtIndexPath у меня есть heightForRowAtIndexPath, возвращающее другую высоту в зависимости от того, разрушается ли ячейкаили расширение:

-(CGFloat)tableView:(UITableView *)_tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
  // if expand
  return 200;
  // if collapse
  return 49;
}

Когда я сворачиваю ячейку в нижней части таблицы, таблица сжимается, но она уменьшается слишком далеко, оставляя значительное количество пробелов в верхней части таблицы.Я попытался [tableView scrollToRowAtIndexPath:indexPath] после вызова reloadRowsAtIndexPaths, что решает проблему, но это делает таблицу нервной.Он опустится слишком далеко, оставляя пустое пространство, а затем снова прыгнет на вершину.Как уменьшить ячейку таблицы, не прокручивая ее слишком далеко?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Может быть, вы можете использовать анимацию UIView в главном потоке, чтобы избежать этого, например:

dispatch_async(dispatch_get_main_queue(), ^{
    [UIView animateWithDuration:0.3 animations:^{
        [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
    }];
});

Затем попробуйте:

if (@available(iOS 11.0, *)) {
    self.tableView.estimatedRowHeight = 0;
    self.tableView.estimatedSectionHeaderHeight = 0;
    self.tableView.estimatedSectionFooterHeight = 0;
    self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic;
}
0 голосов
/ 25 сентября 2018

После изменения чего-либо, влияющего на высоту tableView, вы можете использовать этот код для обновления высоты ячейки без перезагрузки таблицы:

[tableView beginUpdates];
[tableView endUpdates];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...