Предотвращение отображения заголовка UITableView - PullRequest
4 голосов
/ 27 октября 2009

Один из экранов в моем приложении для iPhone - это UITableView, у которого есть строка поиска в заголовке таблицы. Я хочу, чтобы панель поиска была скрыта, пока пользователь не потянет ее вниз, поэтому я использую эту строку в своем методе viewDidLoad:

[self.tableView setContentOffset:CGPointMake(0,40) animated:NO];

Это правильно отображает tableView с прокруткой заголовка в верхней части экрана.

Моя проблема возникает, когда я пытаюсь удалить строку, используя этот метод:

[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:myIndexPath] withRowAnimation:UITableViewRowAnimationRight];

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

Если в tableView достаточно строк, чтобы заполнить окно, таблица заполняется снизу, а заголовок остается скрытым. Проблема возникает только тогда, когда экран не полностью заполнен строками.

Есть идеи, как заставить UITableView не отображать заголовок таблицы при удалении строки?


Добавление: я обнаружил, что то же самое происходит, когда я переводил UITableViewController в режим редактирования с использованием кода, подобного этому:

[self setEditing:NO animated:YES];  

Переходит в режим редактирования, отображает красные кружки «удалить строку» и отображает заголовок таблицы. Может быть, это что-то с анимацией.

Ответы [ 4 ]

1 голос
/ 26 августа 2011

Это было опубликовано некоторое время назад, но я недавно столкнулся с той же проблемой. Повторение setContentOffset после того, как deleteRowsAtIndexPaths решает его.

0 голосов
/ 15 июня 2013

Единственное ХОРОШЕЕ решение, которое я нашел, заключается в следующем: вы добавляете представление нижнего колонтитула в таблицу с начальной высотой 1 пиксель (выделяете UIView с (0,0,320,1) рамкой).

Каждый раз, когда ваши данные изменяются или изменяется высота представления (используйте метод viewWillLayoutSubviews UIViewController для iOs> = 5.0), вы вызываете метод update_footer. В этом методе вы вычисляете количество секций и количество строк, а затем вычисляете высоту данных, умножая их на высоту строк и высоту разделителей секций. Теперь высота нижнего колонтитула равна высоте просмотра таблицы за вычетом вычисленной высоты данных (тогда, если она составляет <1 пиксель, установите ее равной 1). </p>

Установите для кадра нижнего колонтитула значение (0,0,320, эта высота), и не забудьте снова присвоить представление нижнего колонтитула свойству нижнего колонтитула таблицы (table.FooterView = table.FooterView :)), чтобы сообщить таблице, что высота нижнего колонтитула изменено.

Извините, что я не даю код, я сейчас использую Xamarin studio (ранее mono touch) и пишу на C #.

Кстати, этот метод можно использовать, если вы хотите, чтобы пользовательские изображения разделителя ячеек, в том числе между несуществующими ячейками. :)

0 голосов
/ 02 февраля 2011

Попробуйте прослушать вызов UIScrollViewDelegate - (void)scrollViewDidScroll:(UIScrollView *)scrollView на вашем tableView. Если contentOffset становится меньше 40, если вы этого не хотите, остановите прокрутку.

0 голосов
/ 27 октября 2009

Ваши ряды имеют фиксированную высоту? Возможно, вы могли бы определить количество оставшихся строк и сбросить смещение после удаления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...