我有UITableView
。它的单元格包含UITextView
,它们的高度是动态的。 PIC:
如果我为UITableView
高度创建约束 268 px,它是常量,并且在所有单元格后面都有可用空间。 PIC:
没有高度限制高度变为0. pic:
我希望UITableView
的高度与单元格完全匹配。
非常感谢!
答案 0 :(得分: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;
}
答案 1 :(得分:0)
我认为你想要实现的可能是一个糟糕的想法,因为你需要小心不要让UITableView比屏幕更大,否则你就不应该滚动。一个可能更好的方法是: *根据需要设置tableView的高度。 *不要在tableView中使用分隔符 *如果需要,可在细胞内包含分隔符。
使用这种方法,您将以一个没有可见额外行的表结束,这些行可以滚动到所有单元格并使用正确的布局。
如果您仍然想要计算tableView的大小与单元格相同,您可以在调用后设置框架或约束[self.tableView reloadData](取决于您是否使用autolayout)但我不鼓励这样做除非你有充分的理由这样做。
//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];
}