2016-11-15 3 views
0

Я хочу сделать UITableViewController с различными размерами ячеек и различным содержимым ячеек.UITableViewController с различными размерами ячеек и содержанием ячеек в раскадровке

Например:

Example Storyboard

Есть ли способ использовать AutoLayout в Storyboard, чтобы определить различные размеры TableViewCells? Какой был бы лучший способ определить контент (UIView с контентом на нем) TableViewCells?

+0

вы можете использовать другую ячейку с dfferent idenifier. – KKRocks

+0

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

+0

, пожалуйста, ясно, что вы хотите? если вы пробовали какие-то вещи, то добавьте здесь код. – KKRocks

ответ

2

Для изменения ячейки UITableView, у вас есть 2 варианта:

Вариант А (лучший) является использование Autosizing Tableview клеток с Autolayout Ограничений.

Чтобы использовать вариант А, вы должны убедиться, что ваш сотовый contentview имеет четкие верхние & нижних ограничения на все элементы пользовательского интерфейса в его содержимом (см моего изображения здесь) в качестве примера:

Autosizing UITableViewCell

Заголовок UILabel имеет верхнее пространство для супервизора (Cell ContentView) и вертикальное расстояние с SubTitle. SubTitle также имеет ограничение нижнего пространства для супервизора (Cell ContentView).

Это позволяет авторизовать ячейку, так как мои элементы пользовательского интерфейса имеют верхние & нижние ограничения для представления содержимого.

Заключительный шаг для того, чтобы Autosizing это установить эти 2 свойства в вашем UITableView:

self.tableView.estimatedRowHeight = 60.0; 
self.tableView.rowHeight = UITableViewAutomaticDimension; 

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

Опция B - это добавить делегата - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; в ваш UIViewController.

Там вы должны вручную обеспечить высоту ячейки. Если вы используете только 2 различные клетки с 2 фиксированных высотами, вы можете использовать вариант Б, а также и там добавить логику, чтобы обнаружить клетки и вернуть высоту ...

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    if ([cell isKindOfClass:[MyCustomCellTypeAClass class]]) { 
     return 44; 
    } 
    else { 
     return 100; 
    } 
} 
0

Если вы используете авто -layout, высота будет вычисляться с использованием ограничений (если вы их правильно установите); и вы должны использовать метод делегирования следующим образом:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return UITableViewAutomaticDimension 
} 
0

Использование раскадровки? так ли это? enter image description here

Возможно, я должен предоставить демонстрационную версию (StackOverFlowQuestions02), чтобы быть ясной. для получения более подробной информации ---> ссылка:

https://github.com/tingxins/StackOverFlowQuestions

Я считаю, что запуск демо, и вы получите его.

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