2017-01-06 7 views
1

Я использую статический вид таблицы, который содержит 3 разных ячейки. И когда нажата кнопка в первой ячейке, высота первой ячейки должна увеличиваться. Ниже приведена функция, называемая при нажатии кнопки.Невозможно изменить статическую высоту UITableViewCell

@IBAction func toggleExpandCamera(_ sender: Any) { 
    self.shouldShowCameraPreview = !self.shouldShowCameraPreview 
    self.tableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .automatic) 
} 

И делегатом табличного представления heightForRowAt()

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if indexPath.row == 0 { 
     let expandedHeight: CGFloat = 415 
     let collapsedHeight: CGFloat = 115 

     if self.shouldShowCameraPreview { 
      return expandedHeight 
     } 
     return collapsedHeight 
    } else if indexPath.row == 2 { 
     // If already premium, dont show purchases cell. 
     if AGTUserDefaultValues.isUserPremium { 
      return 0 
     } 
     // Last cell should be same height as the table view 
     return self.tableView.frame.height - (self.navigationController?.navigationBar.frame.height ?? 0) 
      - min(UIApplication.shared.statusBarFrame.height, UIApplication.shared.statusBarFrame.width) 
    } else { 
     return super.tableView(tableView, heightForRowAt: indexPath) 
    } 
} 

Я подтвердил, что heightForRowAt() IS вызывался, и это работает отлично для других высот клеток при toggleExpandCamera() называется. Просто первая клетка ведет себя довольно странно. Кажется, что оно исчезло или что-то в этом роде. Я добавил скриншоты ниже, до и после расширения.

Before expanding Camera quality cellAfter expanding cell

При дальнейшем осмотре, это выглядит как клетки все еще существуют, но все еще имеет ту же высоту. Единственное отличие состоит в том, что между двумя ячейками больше места. Я также узнал, что альфа-значение ячейки 0.

Debug

UPDATE Я попытался создал новый проект, с только Tableview и функции для расширения ячейки, и до сих пор на этот проект, то же самое произошло. Если кому-то интересно, я загрузил проект here.

+0

Есть ли у вас какие-либо ограничения, которые могут помешать? – Yahel

+0

@Yahel Хм .. Я так не думаю. Странно то, что это также, по-видимому, меняет альфу ячейки, поэтому она становится невидимой после расширения. –

+0

Вы пытались изменить высоту, но только на 10 пикселей, чтобы проверить, движется ли она немного и в каком направлении? Возможно, это даст вам ключ к тому, что происходит. Я не вижу никакой причины для изменения вашей альфы, учитывая код, который вы предоставляете. – Yahel

ответ

0

Я понял ответ. В моей toggleExpandCamera() функции вместо перезагрузки вид таблицы, я заменил, что с:

@IBAction func toggleExpandCamera(_ sender: Any) { 
    self.shouldShowCameraPreview = !self.shouldShowCameraPreview 
    self.tableView.beginUpdates() 
    self.tableView.endUpdates() 
} 

И высота ячейки одушевляет, как ожидалось.

0

Я попробовал ваш проект и обнаружили, что изменение:

self.tableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .automatic) 

в:

self.tableView.reloadData() 

работ, как и ожидалось.

+0

Да, но он не оживляет изменений: / –