Липкий заголовок UITableview неправильно отображается на iPhone X - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть липкий заголовок в UITableView, который хорошо работает на всех устройствах, кроме iPhone X. Там верхнее поле (-24) не будет инициировано при первом рендеринге, только когда я начну прокручивать оно встает на место, как и должно быть.

Вот пример: Green is the background of the tableview

Вот код:

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: headerId) as! ArticleDetailHeader

    header.article = article
    headerView = header

    return header
}

Загружается после отображения заголовка

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    updateHeaderView()
}

Это функция updateHeaderView

    func updateHeaderView() {

        var height = CGFloat(460)

        if ((view.frame.width * 0.56) < 459) {
            height = view.frame.width * 0.56
        }

        let offsetY = tableView.contentOffset.y

        let newOffset = -1 * offsetY
        let newHeight = (height) + newOffset

        self.lastContentDifference =  height + newOffset

        if (self.lastContentOffset > 64) {
            navigationBarTransparency(transparent: true)
        } else {
            navigationBarTransparency(transparent: false)
        }

        self.lastContentOffset = self.lastContentDifference

        headerView?.headerImage.frame = CGRect(x: 0, y: offsetY, width: tableView.frame.width, height: newHeight)
        headerView?.headerImage.layoutIfNeeded()

}

Это scrollViewdidScroll

override func scrollViewDidScroll(_ scrollView: UIScrollView) {

    isBouncing = scrollView.isBouncing

    if let tableView = scrollView as? UITableView {
        updateHeaderView()

        for cell in tableView.visibleCells {
            guard let cell = cell as? ArticleDetailPost else { continue }
            cell.webView.setNeedsLayout()
        }
    }

}

Это у меня внутри viewDidLoad

        tableView = UITableView(frame: CGRect.zero, style: .grouped)
    tableView.backgroundColor = .white
    tableView.register(ArticleDetailHeader.self, forHeaderFooterViewReuseIdentifier: headerId)
    tableView.register(ArticleDetailPost.self, forCellReuseIdentifier: cellId)
    tableView.separatorColor = .clear        
    tableView.contentInset = UIEdgeInsetsMake(-64, 0, -40, 0)
    tableView.isScrollEnabled = true
    tableView.backgroundColor = .green

У меня такое ощущение, что я упускаю из виду нечто очень простое, но последние несколько часов это ломает мне голову.

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