Первоначально размер headerView совпадает с размером экрана, а верхняя часть первой ячейки выравнивается с нижней частью headerView. Я попытался изменить размер UITableView
headerView
в методе scrollViewDidScorll
, но при прокрутке появлялся пробел. Кажется, есть некоторые ограничения по умолчанию между headerView и ячейкой.Разница между заголовком и ячейкой при изменении размера заголовка таблицы в scrollViewDidScroll
Я изменил цвет фона моего заголовка на синий и распечатал высоту после прокрутки вниз. Кажется, высота заголовка обновляется правильно, но разрыв увеличивается, так как высота заголовка уменьшается.
Вот мой фрагмент кода
class ProfileTableViewController: UITableViewController {
@IBOutlet weak var headerView: UIView!
@IBOutlet weak var backgroundContainerView: UIView!
@IBOutlet weak var backgroundImageView: UIImageView!
@IBOutlet weak var overlayView: UIView!
@IBOutlet weak var backgroundContainerViewTopSpace: NSLayoutConstraint!
var backgroundImageViewOriginHeight: CGFloat = 0
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.estimatedRowHeight = self.tableView.rowHeight
self.tableView.rowHeight = UITableViewAutomaticDimension
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.headerView.frame.size = UIScreen.main.bounds.size
self.backgroundImageViewOriginHeight = self.headerView.frame.size.height
}
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y < 0{
self.headerView.frame.origin.y = scrollView.contentOffset.y
self.headerView.frame.size.height = self.backgroundImageViewOriginHeight - scrollView.contentOffset.y
}else{
self.headerView.frame.size.height = self.backgroundImageViewOriginHeight - scrollView.contentOffset.y
print(self.headerView.frame.size.height)
}
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: reuseIden, for: indexPath) as! Mycell
cell.setNeedsLayout()
cell.layoutIfNeeded()
return cell
}
}
Обновление высота заголовка с консоли
574.5
572.5
571.5
569.0
568.0
567.0
565.5
564.5
563.5
562.5
561.5
560.0
Любая помощь и предложение приветствуется
он меньше в 2 раза быстрее, потому что вы меняете высоту и смещение так, что делает его меньше 2 раза –