У меня есть липкий заголовок в UITableView, который хорошо работает на всех устройствах, кроме iPhone X. Там верхнее поле (-24) не будет инициировано при первом рендеринге, только когда я начну прокручивать оно встает на место, как и должно быть.
Вот пример:
Вот код:
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
У меня такое ощущение, что я упускаю из виду нечто очень простое, но последние несколько часов это ломает мне голову.