Как свернуть заголовок UITableView при прокрутке

Функциональность, которую я пытаюсь достичь, показана в Twitter здесь.

Я рассматривал несколько ресурсов в Интернете, включая эту статью Michigan Labs, которая очень полезна для получения коллапсирующей анимации с использованием ограничений на представление заголовка, которое находится выше UITableView

Проблема, которую я вижу в этом подходе, состоит в том, что, поскольку она не является технически частью UITableView, заголовок не будет реагировать на жесты прокрутки вверх/вниз. Однако, когда я загружаю приложение Twitter, заголовок реагирует на касание. Как сделать заголовок чувствительным к жестом касания?

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

1 ответ

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

view.addGestureRecognizer(scrollView.panGestureRecognizer)

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

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

override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
 if self.pointInside(point, withEvent: event)
 return self.tableView
 return nil;
 }

(Версия Objective-C ниже)

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
 if ([self pointInside:point withEvent:event])
 return _nextView;
 return nil;
}

licensed under cc by-sa 3.0 with attribution.