2017-02-03 1 views
2

Требование;Swift tableView.reloadRows удаление ячеек

У меня есть статический UITableView, и я пытаюсь открыть pickerview при нажатии одной из ячеек. Я меняю размер на heightForRowAt, поэтому при нажатии на кнопку cell мне нужно reload так, чтобы размер изменился. Если я использую reloadData() он отлично работает (я хочу использовать reloadRows так что я могу добавить анимацию)

Выпуск:

при попытке reloadRows(at..., with: .automatic) строки просто исчезнуть. Если I reloadRows в viewWillAppear ничего не меняется, строка не исчезает.

Код:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    print(indexPath) 
    if colorCelllExpandedIndex != nil{ 
     let prev = colorCelllExpandedIndex 
     colorCelllExpandedIndex = nil 
     tableView.reloadRows(at: [prev!], with: .automatic) 
     //tableView.reloadData() 
    } else { 
     colorCelllExpandedIndex = indexPath 
     colorCell.frame.size.height = CGFloat(colorCellExpandedHeight) 
     tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic) 
    } 

} 

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 

    if indexPath == colorCelllExpandedIndex { 
     return CGFloat(colorCellExpandedHeight) 
    } else { 
     if indexPath.row == 1 { 
      return CGFloat(colorCellRegularHeight) 
     } 
     return UITableViewAutomaticDimension 
    } 
} 

экрана Изображения:

before and after clicking the color button

How it looks like if I use reloadData

ответ

2

Это кажется, что есть некоторые проблемы с такими функциями, как reloadRows(at:with:) когда это используя статический UITableView, есть аналогичный вопрос в этом SO questionбез разрешения.

я был в состоянии, однако, чтобы обновить высоту ячейки путем выполнения следующих функций:

tableView.beginUpdates() 
tableView.endUpdates() 

Так подход вы можете взять может быть следующим:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    print(indexPath) 
    if colorCelllExpandedIndex != nil{ 
     colorCelllExpandedIndex = nil 
    } else { 
     colorCelllExpandedIndex = indexPath 
    } 
    tableView.beginUpdates() 
    tableView.endUpdates() 

} 

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if indexPath == colorCelllExpandedIndex { 
     return CGFloat(colorCellExpandedHeight) 
    } else { 
     if indexPath.row == 0 { 
      return CGFloat(colorCellRegularHeight) 
     } 
     return UITableViewAutomaticDimension 
    } 
} 

Это внушало один из ответов, приведенных в another SO question относительно сокрытия ячеек в статических представлениях таблицы.