2010-04-24 2 views
7

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

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

Как это исправить?

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

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

ответ

23

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

+8

Ну, теперь вы можете принять свой собственный ответ. – Klaas

+2

Не работает для меня на iOS 7 ... –

+0

Работаю для меня в iOS 9 –

1

Ошибка в той же проблеме, потому что некоторые из моих 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 
     } 
    } 
}); 
Смежные вопросы