2017-01-31 14 views
0

Первоначально размер headerView совпадает с размером экрана, а верхняя часть первой ячейки выравнивается с нижней частью headerView. Я попытался изменить размер UITableViewheaderView в методе scrollViewDidScorll, но при прокрутке появлялся пробел. Кажется, есть некоторые ограничения по умолчанию между headerView и ячейкой.Разница между заголовком и ячейкой при изменении размера заголовка таблицы в scrollViewDidScroll

Я изменил цвет фона моего заголовка на синий и распечатал высоту после прокрутки вниз. Кажется, высота заголовка обновляется правильно, но разрыв увеличивается, так как высота заголовка уменьшается.

enter image description here

Вот мой фрагмент кода

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 

Любая помощь и предложение приветствуется

+0

он меньше в 2 раза быстрее, потому что вы меняете высоту и смещение так, что делает его меньше 2 раза –

ответ

0

В вашем scrollViewDidScroll, под else, вы не устанавливаете self.headerView.frame.origin.y на номер scrollView.contentOffset.y. Если вы только изменяете высоту представления, то представления Y будут оставаться неизменными, но по мере того, как содержимое элемента просмотра прокрутки движется, оно будет двигаться вверх.

Вам необходимо будет установить self.headerView.frame.origin.y в scrollView.contentOffset.y. Это заставит представление перемещаться с прокруткой в ​​верхней части окна.

Добавьте строку

self.headerView.frame.origin.y = scrollView.contentOffset.y 

в else, чтобы исправить эту проблему.

+0

Удаление строки 'self.headerView.frame.origin.y = scrollView.contentOffset.y' не устраняет проблему , 'self.headerView.frame.origin.y' применяется только тогда, когда' scrollView.offset.y' меньше нуля, это означает, что пользователь перетаскивает вниз, поэтому я хочу иметь эластичный эффект крышки заголовка. Когда пользователь прокручивается вниз, я уменьшаю высоту заголовка. –

+0

@ KesongXie. О, я вижу, вам нужно установить 'self.headerView.frame.origin.y'' 'scrollView.contentOffset.y', как теперь ваши представления снизу поднимаются в два раза быстрее (один раз из-за прокрутки и еще раз, потому что вы уменьшаете высоту). – vrwim

+0

@ KesongXie Я обновлю свой ответ – vrwim

 Смежные вопросы

  • Нет связанных вопросов^_^