2015-02-02 4 views
0

У меня есть UITableView. Его ячейка содержит UITextView, и их высота динамична. ПИК:Высота UITableView в зависимости от его ячеек

storyboard

Если создать ограничение 268 точек для UITableView высоты она постоянна и есть свободное пространство после всех клеток. Pic:

uitableview

Без высоты ограничения высота становится 0. рис:

Я хочу высоту UITableView, чтобы соответствовать клетки точно.

Большое спасибо!

ответ

0

Для создания строк с динамической высотой на основе содержимого, которое необходимо иметь для контента (в вашем случае это текст), вычислите высоту, необходимую для отображения текста. Также, если текст большой/малый, вы можете установить ограничение на максимальную/минимальную высоту ячейки.

Внутри метода таблицы делегата

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     // calculate the height of the cell based on the size of the text required to be displayed 

CGSize textViewSize = [text sizeWithFont:[UIFont fontWithName:@"Marker Felt" size:20] 
         constrainedToSize:CGSizeMake(WIDHT_OF_VIEW, FLT_MAX) 
         lineBreakMode:UILineBreakModeTailTruncation]; 
// WIDHT_OF_VIEW could be text view's width and FLT_MAX could be 10,000 

CGFloat cellHeight = 50.0f; // initialize with minimum cell height 

cellHeight = cellHeight + textViewSize.height; 

//you can set MAX_HEIGHT_OF_CELL 
if(cellHeight > MAX_HEIGHT_OF_CELL) 
{ 
    return MAX_HEIGHT_OF_CELL;// set the text view to scroll vertically while creating cell 
    } 
else 
{ 
    return cellHeight; 
} 
} 

Точно так же, когда вы создаете ячейку в

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    Cell *cell; 
    .... 
    .... 

    CGFloat cellHeight = [self tableView:tableView heightForRowAtIndexPath:indexPath]; 
    cell.textView setFrame:CGRectMake (cell.textView.frame.origin.x, cell.textView.frame.origin.y, cell.textView.frame.size.width, cellHeight - 50.0f) 

... 
... 

return cell; 
} 
0

Я думаю, что вы хотите достичь, это, вероятно, плохая идея, как вам нужно быть осторожным не имеет UITableView больше экрана или вы не сможете прокручивать. Вероятно, лучший подход будет: * Установите высоту таблицыView в соответствии с вашими потребностями. * Не используйте разделитель в таблицеView * Включите сепаратор в виде ячеек внутри ячеек, если они вам понадобятся.

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

Если вы все еще хотите рассчитать размер таблицыView, чтобы быть тем же самым из ячеек, вы можете установить фрейм или ограничение после вызова [self.tableView reloadData] (зависит, если вы используете автозапуск или нет), но я препятствую этот подход, если у вас нет веских оснований для этого.

//example 
-(void)viewDidLoad{ 
[super viewDidLoad] 
[self.tableView reloadData]; 
} 
-(void)viewWillAppear:(BOOL)animated{ 
[super viewWillAppear:animated]; 
// Max height is 268; 
if (self.tableView.contentSize.height<=268){ 
//tableHeightConstraint is an IBOutlet to the height Constraint. 
tableHeightConstraint.constant = self.tableView.contentSize.height; 
}else{ 
tableHeightConstraint.constant = 268; 
} 
[self.view setNeedsLayout]; 
} 
+0

О, я забыл заметить, что есть 'UIScrollView', который содержит все (включая' UITableView'). Поэтому 'UITableView' может быть больше, чем экран. Я вставил 'tableHeightConstraint.constant = self.tableView.contentSize.height;' и '[self.view setNeedsLayout]' в 'viewWillAppear' и' [self.tableView reloadData] 'в' viewDidLoad', но это не работает. Высота 'UITableView' не соответствует ячейкам. –

+0

Можете ли вы опубликовать образ того, что вы хотите достичь, и/или пример проекта? –

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