我的自定义UITableViewCell
只有一个UILabel
。 UILabel
可能太长而不适合作为一行,因此我必须动态设置UITableViewCell
的高度。
我设置UILabel
的前导,上限和高度(大于或等于)约束。我错过了任何限制吗?
ProductDetailDescriptionTableViewCell *cell = (ProductDetailDescriptionTableViewCell *)[self productDetailDescriptionCellInTableView:tableView
indexPath:indexPath];
CGSize cellSize = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return cellSize.height + 1;
这是在tableView:heightForRowAtIndexPath:
我还设置了UILabel
的preferredWith。
当我运行我的代码时,单元格的高度为0,标签的框架为
(0,-21,42,21)
我希望有人可以提供帮助。非常感谢你!!!
答案 0 :(得分:0)
可能是你的逻辑帮助。确保您的标签行设置为0。(label.numberOfLines = 0)
。这对我有用。
//Count Cell Size Here - It’s depend on content size of label. Put requiredHeight method in Tableviewcell class.
- (CGFloat)requiredHeight
{
CGSize labelSize = [label.text sizeWithFont: [label font]
constrainedToSize: CGSizeMake(300.0f, 300.0f)
lineBreakMode: NSLineBreakByTruncatingTail];
int RowHeight = 30.0f + labelSize.height;
if (RowHeight < 44) {
if ([UIScreen mainScreen].bounds.size.width == 320) { // iPhone4 & iPhone5
return 45.0f;
} else if([UIScreen mainScreen].bounds.size.width == 375){ // iPhone6
return 54.0f;
}else{// iPhone6Plus
return 59.0f;
}
}else{
if ([UIScreen mainScreen].bounds.size.width == 320) { // iPhone4 & iPhone5
return 30.0f + labelSize.height;
} else if([UIScreen mainScreen].bounds.size.width == 375){ // iPhone6
//return 54;
return 40.0f + labelSize.height;
}else{// iPhone6Plus
//return 59;
return 45.0f + labelSize.height;
}
}
}
//Call your custom cell class here
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
ATableViewCell *cell = (ATableViewCell*)[self tableView:self->tableView cellForRowAtIndexPath:indexPath];
return [cell requiredHeight];
}
答案 1 :(得分:0)
更改特殊单元格的框架,如:
{standard input}: Assembler messages:
{standard input}:3349: Error: unsupported relocation against r3
{standard input}:3349: Error: unsupported relocation against svr
{standard input}:3375: Error: unsupported relocation against r3
{standard input}:3375: Error: unsupported relocation against svr
{standard input}:3510: Error: unsupported relocation against r3
{standard input}:3510: Error: unsupported relocation against svr
{standard input}:3517: Error: unsupported relocation against r3
{standard input}:3517: Error: unsupported relocation against svr
还要确保返回自定义高度,如:
float longLabelRowHeight; // Just for demonstration
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath {
CGSize constraint = CGSizeMake(self.frame.size.width, 9999);
CGSize size = [label.text sizeWithFont:label.font
constrainedToSize:constraint
lineBreakMode:UILineBreakModeWordWrap];
longLabelRowNumber = indexPath.row; //Just for demonstration
longLabelRowHeight = size.height;
if (longLabelRowHeight > 44.f) { // or whatever size
cell.frame.size = CGSizeMake(self.frame.size.width, longLabelRowHight)
}
}
答案 2 :(得分:0)
我为您创建了一个示例项目check it here。
我认为最简单的方法如下:
这样,它应始终适合您的表格视图单元格,并且文本不会被截断。我不确定将行高设置为自动,因为它应该是默认值,但你可以这样做:self.tableView.rowHeight = UITableViewAutomaticDimension;
如果您遇到任何问题,我建议在自定义单元格上使用this terrific article。
答案 3 :(得分:0)
如果您只想在标签中显示文字,则无需制作自定义单元格。
只需将UILabel
的行号设为0(零)
示例强>
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
}
cell.textLabel.text = @"This Is an example for dynamic height of UITableviewcell and UILabel in UITableView";
cell.textLabel.numberOfLines = 0;
return cell;
}
您不必指定heightForRowAtIndexPath
方法