Неправильная высота представления контейнера в заголовке UITableView

Я настроил UITableViewController с представлением контейнера в качестве представления заголовка в построителе интерфейсов. Вид заголовка имеет высоту 180 пикселей:

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

К сожалению, во время выполнения высота представления контейнера составляет всего 116 пикселей:

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

Если я заменю Container View в заголовке таблицы стандартным представлением, скажем, UILabel, высота представления заголовка, которую я установил в Interface Builder, будет правильно соблюдаться. Но это как-то не работает с Container Views.

Настройка вложений прокрутки не помогает, потому что она просто перемещает переполненную часть изображения под панель навигации, высота представления контейнера по-прежнему неверна.

Любые идеи? Спасибо!


person Tobi Kremer    schedule 13.08.2015    source источник
comment
После дня возни я сдался и реализовал заголовок как пользовательское представление. Установка его в качестве tableHeaderView работала отлично, поэтому я предполагаю, что проблема заключается в том, что iOS не может определить правильную высоту представлений контейнера во время выполнения.   -  person Tobi Kremer    schedule 14.08.2015


Ответы (1)


Вы должны реализовать UITableViewDelegate и объявить метод

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

Ссылка: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDelegate_Protocol/#//apple_ref/occ/intfm/UITableViewDelegate/tableView:heightForHeaderInSection:

person Lai Xin Chu    schedule 13.08.2015
comment
Спасибо, но это не помогает. Он правильно устанавливает высоту для всех заголовков, кроме Container View в заголовке таблицы. - person Tobi Kremer; 13.08.2015
comment
Я заметил, что ваш заголовок не реализован с использованием ячейки прототипа; скорее это просто вид над таблицей. В таком случае, не можете ли вы просто добавить к нему ограничение по высоте 180? - person Lai Xin Chu; 13.08.2015
comment
Точно! Я боюсь, что невозможно добавить ограничения к представлению заголовка таблицы, определенному в Interface Builder. - person Tobi Kremer; 13.08.2015
comment
вы можете использовать ViewController, определить представление контейнера, а затем табличное представление под ним. это было бы почти так же, как использование UITableViewController. - person Lai Xin Chu; 13.08.2015
comment
В качестве альтернативы вы можете определить представление заголовка как ячейку-прототип, а затем использовать методы UITableViewDelegate, чтобы вставить представление заголовка только для первого раздела. - person Lai Xin Chu; 13.08.2015
comment
Оба подхода имеют свои недостатки AFAICT: с решением UIViewController я потеряю прокрутку, потому что представление контейнера застрянет вверху. Второй подход, вероятно, вызовет у меня головную боль при попытке выровнять заголовок прямо под панелью навигации и заставить его прокручиваться под ней. Я был там и помню, как это было очень болезненно. Использование UITableViewController решает большинство проблем из коробки и довольно просто, но что-то кажется особенным, когда речь идет о представлениях контейнеров в качестве заголовков tableview... - person Tobi Kremer; 13.08.2015