Заголовок UITableVIew без подпрыгивания при вытаскивании
У меня есть UITableView
, который я могу легко добавить в заголовок. Многие приложения (например, Facebook, для просмотра событий) имеют заголовок, который, когда вы выходите вниз, заголовок остается включенным, а остальная часть таблицы (t21 > ) подпрыгивает. При прокрутке заголовка исчезает. Как я могу достичь этой функциональности?
Прямо сейчас, когда я вытаскиваю UITableView
, даже заголовок также отскакивает от
Ответы
Ответ 1
Вы можете легко добиться этого эффекта, добавив subview в представление заголовка и отрегулировав его frame
или transform
, когда представление таблицы прокручивается за верхнюю часть, т.е. компонент y
его contentOffset
становится отрицательный.
Пример (в подклассе UITableViewController
):
- (void)viewDidLoad
{
[super viewDidLoad];
CGFloat headerHeight = 64.0f;
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, headerHeight)];
UIView *headerContentView = [[UIView alloc] initWithFrame:headerView.bounds];
headerContentView.backgroundColor = [UIColor greenColor];
headerContentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[headerView addSubview:headerContentView];
self.tableView.tableHeaderView = headerView;
}
//Note: UITableView is a subclass of UIScrollView, so we
// can use UIScrollViewDelegate methods.
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat offsetY = scrollView.contentOffset.y;
UIView *headerContentView = self.tableView.tableHeaderView.subviews[0];
headerContentView.transform = CGAffineTransformMakeTranslation(0, MIN(offsetY, 0));
}
(чтобы это было просто, я только что использовал первый подзаголовок фактического заголовка в scrollViewDidScroll:
, вместо этого вы можете использовать свойство для этого.)
Ответ 2
Скорее всего, ваш UITableView
работает правильно. Заголовки разделов по умолчанию являются липкими в таблицах стиля Plain. По мере того, как вы прокручиваете вниз, заголовок остается в верхней части кадра UITableView
, пока заголовок следующего раздела не отталкивает его. Противоположность возникает при прокрутке вверх. И наоборот, вы получаете липкое поведение на нижних колонтитулах в нижней части рамки UITableView
.
РЕДАКТИРОВАТЬ Непонятный исходный вопрос:
Я бы предложил использовать заголовок раздела, а не заголовок таблицы, чтобы получить липкое поведение, которое вы ищете.
Включите раздел в свои данные без строк и поместите представление заголовка таблицы в это представление заголовка раздела.
Ответ 3
Существует два способа установки заголовка таблицы:
-
Используя свойство .tableHeaderView
напрямую (этот заголовок прокручивается вместе с таблицей)
-
Переопределение функции - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
(этот заголовок остается статичным с разделом)
По звукам вы должны использовать второй метод вместо использования свойства .tableHeaderView