我正在制作一个tableView,根据内容,单元格高度是动态的。因此,当单元格的内容更多时,单元格的顶部和底部边距更多,如果任何特定单元格的内容较少,则顶部和底部边距太小,但我希望每个人都有相同的边距,无论内容如何。
我说的是第一个单元格,其中边距是随机的(基于内容),我希望顶部和底部边距与任意数量的内容相同。我没有使用自定义单元格。
任何帮助都会非常感激,我已经花了很多时间。如果你想要我的代码,我可以在这里通过它..
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 0) {
NSString *session_name = [self.parentDetailArray valueForKey:@"session_name"];
NSString *venue = [session_name stringByAppendingString:[self.parentDetailArray valueForKey:@"venue"]];
NSString *tmp_name_venue = [session_time stringByAppendingString:venue];
if(![self.parentDetailArray valueForKey:@"speakers"] || ![[self.parentDetailArray valueForKey:@"speakers"] isEqual:@""])
{
NSString *speaker_label = @"Speakers: ";
NSString *speakers = [[NSString alloc]init];
speakers = [self.parentDetailArray valueForKey:@"speakers"];
speakers = [speaker_label stringByAppendingString:speakers];
tmp_name_venue = [speakers stringByAppendingString:tmp_name_venue];
}
NSLog(@"%@", tmp_name_venue);
CGSize detailTextViewSize = [tmp_name_venue sizeWithFont:[UIFont fontWithName:@"Roboto-Light" size:18]constrainedToSize:CGSizeMake(296, FLT_MAX)lineBreakMode:UILineBreakModeTailTruncation];
if(detailTextViewSize.height <37)
{
return 40;
}
if(detailTextViewSize.height >tmp_name_venue.length)
{
return detailTextViewSize.height;
}
else
{
detailTextViewSize.height = [tmp_name_venue length];//Here i'm just attempting to get the margin right.
return detailTextViewSize.height;
}
}
答案 0 :(得分:1)
如果我的最后评论是正确的,那么当您的问题得到答案时。如果细胞大小调整,则没有最简单的方法来定位细胞内容。所以我发现这个解决方案对我来说没问题我以简单的方式创建单元格,没有任何边距等等,并且在创建之后没问题 - 我有各种尺寸并且可以操纵它。
首先,您需要创建单元格并计算或设置所需的边距
....
// place there cells init (not inside heightForRowAtIndexPath)
// someway you have firstCell object representing first cell in table
CGFloat marginHeight = 10;
[self hierarchyItemsReposition:firstCell withTopShift:marginHeight];
[firstCell setFrame:CGRectMake(firstCell.frame.origin.x, firstCell.frame.origin.y, firstCell.frame.size.width, firstCell.frame.size.height+marginHeight*2)];
...
- (void)hierarchyItemsReposition:(UIView *)cell withTopShift:(CGFloat)shift
{
for (UIView *subview in cell.subviews)
{
[subview setFrame:CGRectMake(subview.frame.origin.x, subview.frame.origin.y+shift, subview.frame.size.width, subview.frame.size.height)];
[self hierarchyItemsReposition:subview withTopShift:shift];
}
}
我只是遍历此单元格中的所有子视图并将其移动到所需位置。
我将起点放在heightForRowAtIndexPath之外,因为在这种情况下,所有其他单元格帧都以正确的方式计算,如果你想在将来使用它,它将正常工作。