Попытка форсировать перерисовку UITableViewCell - PullRequest
8 голосов
/ 24 апреля 2010

Я нашел этот пост в Beveled UITableViewCells из http://news.selectstartstudios.com/beveled-uitableviewcells/. Я использую технику, чтобы уменьшить ширину ячеек, и по большей части она прекрасно работает.

Однако у меня небольшая проблема. Иногда клетки не перерисовываются должным образом. Например, хотя ячейка должна быть «средней», она отображается как «верхняя»: yfrog.com/f1screenshot20100424at100

Как я могу это исправить?

Я попытался принудительно перерисовать ячейку с помощью [cell setNeedsDisplay], [cell setNeedsLayout], [tableView reloadRowAtIndexPath: withAnimation:], [cell drawrect:] и [tableView drawRect: atIndexPath]. У меня нет идей.

Еще раз спасибо!

Ответы [ 2 ]

24 голосов
/ 25 апреля 2010

Оказывается, мне нужно было вызвать [cell.backgroundView setNeedsDisplay] в конце cellForRowAtIndexpath.

1 голос
/ 25 апреля 2016

столкнулся с той же проблемой, потому что некоторые из моих cellForRowAtIndexpath были в фоновом потоке. Решением в этом случае является принудительное принудительное обновление любых прямых подпредставлений ячеек в основной поток:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    if (cell.tag == indexPath.row){
       // data retrieval that may block main thread and cause temp freeze...
       dispatch_async(dispatch_get_main_queue(), ^{
          // update any cell subviews here
       }
    }
});
...