UITableView не возвращается в нужное место после отскока при использовании пользовательской высоты раздела

#iphone #objective-c #ios #uitableview

#iPhone #objective-c #iOS #uitableview

Вопрос:

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

 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
  return 39.0;
}
 

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

введите описание изображения здесь

Есть идеи, почему это происходит или какие существуют обходные пути?

ОБНОВЛЕНИЕ: я также попытался увеличить свойство высоты раздела TableView в IB. Это увеличивает высоту, но существует та же проблема.

Ответ №1:

Похоже, вы перетаскиваете таблицу вверх, чтобы отображалась последняя строка таблицы плюс пустое пространство под ней, например:

просмотр таблицы перетаскивается вверх

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

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

Комментарии:

1. Вы абсолютно правы. Вчера я этого не заметил, потому что в таблице было всего 8 строк. С заголовком раздела по умолчанию вся таблица точно соответствует полноэкранному режиму на iPhone. После увеличения высоты раздела весь вид таблицы расширился и больше не помещался на экране. Спасибо за уведомление amp; GL 😉

Ответ №2:

Существует другой способ установить высоту раздела без использования делегата:

 self.tableView.sectionHeaderHeight = 39.0; 
 

Если это не поможет, вам придется повозиться с UIScrollView Delegate .

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

Комментарии:

1. Спасибо, но не удалось увеличить хотя бы высоту раздела: ( Попробовал установить «self.TableView.sectionHeaderHeight = 39.0;» в viewDidLoad amp;amp; viewWillAppear, но высота раздела вообще не увеличивается. Также пытался увеличить высоту фрейма tableHeaderView до 39,0, но высота также вообще не увеличивалась.