Скрыть UITableView, установив высоту строки в 0?
Я просто унаследовал код, который скрывает / показывает строки UITableView с помощью делегата heightForRowAtIndexPath
метод и возвращая высоту 0 для "скрытых строк".
Код работает, но меня беспокоит, что это может быть чревато непредвиденными сложностями. Может ли кто-нибудь или ослабить мои опасения, или дать мне веские причины, по которым это может вызвать проблемы (я не смог найти проблем с первоначальным тестированием).
Таблица довольно мала <всего 10 строк и потребует настраиваемой высоты строки даже без этого решения для скрытых строк.
3 ответа
Было бы чище добавлять и удалять строки между двумя beginUpdates
а также endUpdates
звонки, но я не понимаю, почему этот метод 0-высоты не должен работать.
Если нет никаких UI-артефактов, то есть (например, кнопка " Удалить" показывает переполнение в следующую ячейку).
Я делаю то же самое в коде, над которым я только что работал. Меня не устраивает разное поведение при разных настройках табличного представления.
Альтернатива в моем случае более сложная (модель, которая адаптируется к тому, что видно или нет).
На данный момент я добавил комментарий HACK и задокументировал некоторые особенности.
Вот что я нашел (iOS 5.0 протестировано):
- Установить tableView.rowHeight = 1; Ноль даст ячейке с нулевой высотой (как возвращается tableView:tableView heightForRowAtIndexPath:) некоторую высоту по умолчанию.
- У вас должен быть разделитель клеток. Если ни один не выбран, то высота по умолчанию назначается для строк нулевой высоты. Высота 1 включена с разделителем.
Если ваш код работает по-другому, было бы интересно узнать, как он настроен.
Я использую этот метод установки скрытых высот ячеек на 0. Он работает хорошо, а также означает, что я могу анимировать включение новых ячеек, увеличивая высоту ячеек (например, добавляя ячейку DatePicker, как это делает приложение календаря).
Несколько вещей, на которые я должен был обратить внимание в iOS 7.1, это то, что очень сжатый текст все еще появляется, даже когда высота ячейки = 0, поэтому мне нужно было удалить текст ячейки в этом случае. Кроме того, я изменил размер separatorInset ячейки, так как он также отображался.