Почему ячейка табличного представления перемещается, когда я перехожу на подробный экран? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть UIViewController, который содержит UITableView (в отличие от использования UITableViewController), и он делает что-то очень странное.

Когда я касаюсь ячейки, чтобы перейти к подробному экрану, когда я затем нажимаю кнопку «Назад», коснувшаяся ячейка (часто, но не всегда) находится дальше экрана, чем была, когда я касалась ее.Иногда это даже совершенно не видно.

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

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

enter image description here

После многих исследований, я думаю, проблема, скорее всего, связана с тем, что ячейки динамически изменяют размер самих себя (поскольку объем текстав каждом может варьироваться) и табличное представление пытается вычислить высоту ячейки.Я убедился:

  • все подпредставления в ячейке имеют ограничения сверху, снизу и сбоку (для этого я даже удалил пару стековых представлений)
  • Я установилtableView.estimatedRowHeight = 160
  • Я установил tableView.rowHeight = UITableView.automaticDimension

Я не делаю ничего необычного в моих методах делегата tableview:

extension DocumentViewController: UITableViewDataSource, UITableViewDelegate {
        func numberOfSections(in tableView: UITableView) -> Int {
            return 1
        }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return viewModel.data.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "documentTableViewCell", for: indexPath) as! DocumentTableViewCell
        cell.tag = indexPath.row
        cell.updateCellProperties(publication: viewModel.data[indexPath.row], indexPathRow: indexPath.row)
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: showDocumentSegueIdentifier, sender: self)
    }
} 

и эточто происходит в cell.updateCellProperties:

func updateCellProperties(document: DocumentModel, indexPathRow: Int) {
    selectedBackgroundView?.backgroundColor = UIColor.clear

    authorName.text = document.formattedAuthor.name
    authorInitials.text = document.formattedAuthor.initials
    documentTitle.text = document.title
    setAuthorImage(document, indexPathRow: indexPathRow)
    setDocTypeBadge(document: document, indexPathRow: indexPathRow)
    unreadCommentCount.text = ""

    // set read/unread style
        var alphaValue = CGFloat(1.0)
        if let isRead = document.isRead {
          if isRead {
            contentView.backgroundColor = UIColor.white
            alphaValue = CGFloat(0.5)
          } else {
            contentView.backgroundColor = UIColor.lightGrey3
          }
          authorName.alpha = alphaValue
          authorInitials.alpha = alphaValue
          authorImage.alpha = alphaValue
          documentTitle.alpha = alphaValue
          unreadCommentCount.alpha = alphaValue
          docTypeBadge.alpha = alphaValue
        }
  }

, и в prepare(for segue:):

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let path = tableView.indexPathForSelectedRow
    if (segue.identifier == showDocumentSegueIdentifier) {
        let controller = segue.destination as! DocumentViewController
        controller.hidesBottomBarWhenPushed = true
    }
}

вообще ничего интересного не происходит, я чувствую, что все сделал правильно, но это странноповедение не уйдетУ вас есть какие-либо предложения, которые я могу попробовать?

Спасибо

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