2013-12-17 2 views
1

У меня есть UIViewController с 3 UITableView s, расположенными вертикально на нем. Я не хочу, чтобы ни одна из таблиц не прокручивалась. Высота для двух таблиц (A и B) рассчитывается по их содержимому - третий (C) будет изменен, чтобы соответствовать любому пространству, оставшемуся на экране. Для C, я буду знать, сколько строк мне нужно отобразить, и я хочу рассчитать правильный heightForRowAtIndexPath, чтобы все ячейки были в порядке.Расчет высоты строки для фиксированного числа рядов и высоты стола

Сейчас я пытаюсь

  • взять высоту всего экрана
  • вычесть от общей высоты для A
  • вычесть от общей высоты для B
  • Вычтем некоторое фиксированное пустое пространство
  • вычесть размер C 's header
  • вычитать от размера колонтитула
  • разделяй C «s по числу клеток в C

От того, как я полагаю, это должно получить мне высоту, что нужно для каждой отдельной клетки в C. Верно ли это? Есть что-то, чего я не вижу? Вот код, я использую:

- (CGFloat) tableView:(UITableView *) heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    if (tableView = self.tableC) 
    { 

     // self.lcA & self.lcB are NSLayoutContraints that I'm setting after I calculate how tall those tables need to be 
     // buffer is some white space padding I add to keep the tables from touching - it will be hardcoded to some constant before this code runs 

     CGFloat target = (self.view.bounds.size.height - self.lcA.constant - self.lcB.constant - [self tableView:tableView heightForHeaderInSection:indexPath.section] - [self tableView:tableView heightForFooterInSection:indexPath.section] - buffer)/[self tableView:tableView numberOfRowsInSection:indexPath.section]; 

    } 

} 

Однако, когда я запускаю это, он выходит из строя, говоря -[MyViewController tableView:heightForHeaderInSection:]: unrecognized selector sent to instance

Я явно не реализующий heightForHeaderInSection на данном контроллере представления, но контроллер установлен как <UITableViewDataSource,UITableViewDelegate,...> в файле MyViewController.h. Нужно ли использовать heightForHeaderInSection, чтобы использовать этот код? Если да, есть ли способ, которым я могу его реализовать, и просто заставить его вернуть значение по умолчанию (что-то вроде return [super heightForHeader];)? Если нет, то почему я получаю эту ошибку?

ответ

1

Вместо того чтобы делать "- [само Tableview: Tableview heightForFooterInSection: indexPath.section]" и все, что вещи, я думаю, вы можете получить доступ высоту заголовка этим:

self.tableA.sectionHeaderHeight 

для колонтитула:

self.tableA.sectionFooterHeight 

также у вас есть:

self.tableA.tableHeaderView 
self.tableA.tableFooterView 

вы можете иметь лучший вид на все это в яблочном документ TableView Doc

0

Я никогда не пробовал это прямо, но это может дать вам направление. UITableView спускается с UIScrollView. Таким образом, вы можете использовать все свойства UIScrollView, например scrollEnabled, для предотвращения прокрутки и contentSize.

+0

Да, я использую 'contentSize' для установки' NSLayoutConstraint', о котором я упомянул в коде, который я разместил, и я проверил флажок, чтобы запретить прокрутку на моей раскадровке, поэтому это тоже позаботится. Я ищу, как сжать ячейки в таблице 'C', чтобы они все вписывались в пространство, которое у меня есть. Я не думаю, что на 'UIScrollView' есть что-то, что может помочь мне в этом, если я не пропущу что-то. – GeneralMike

1

headerViewForSection - это метод UITableView, поэтому вам нужно называть его не в контроллере, а в tableView. Вы также можете реализовать его в своем контроллере, чтобы вернуть значение по умолчанию, которое вы должны использовать UITableViewAutomaticDimension в качестве возвращаемого значения. Эта константа будет работать, начиная с iOS 5

+0

+1 для 'UITableViewAutomaticDimension' - я никогда не слышал об этом раньше. Кажется, он работает не так - я просто делаю 'return UITableViewAutomaticDimension;' (это единственная строка в моей 'heightForHeaderInSection:'). Я ввел некоторые 'NSLog', и он просто возвращает' -1.00000' – GeneralMike

Смежные вопросы