Iphone 如何在不考虑内容的情况下获得完全相同的上下边距。?

Iphone 如何在不考虑内容的情况下获得完全相同的上下边距。?,iphone,ios,objective-c,Iphone,Ios,Objective C,我正在制作一个表格视图,其中单元格高度根据内容动态变化。因此,当单元格的内容较多时,单元格的上下边距就较多,如果任何特定单元格的内容较少,则上下边距就太少,但我希望每个单元格的上下边距都相同,而不考虑内容 我说的是第一个单元格,其中的边距是随机的(基于内容),我希望顶部和底部的边距与任意数量的内容相同。我没有使用自定义单元格 任何帮助都会非常感激,我在这方面花了很多时间。如果你想要我的代码,我可以在这里通过 -(CGFloat)tableView:(UITableView *)tableVie

我正在制作一个表格视图,其中单元格高度根据内容动态变化。因此,当单元格的内容较多时,单元格的上下边距就较多,如果任何特定单元格的内容较少,则上下边距就太少,但我希望每个单元格的上下边距都相同,而不考虑内容

我说的是第一个单元格,其中的边距是随机的(基于内容),我希望顶部和底部的边距与任意数量的内容相同。我没有使用自定义单元格

任何帮助都会非常感激,我在这方面花了很多时间。如果你想要我的代码,我可以在这里通过

-(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;
        }


    }
-(CGFloat)tableView:(UITableView*)tableView rowatinexpath的高度:(nsindepath*)indepath
{
if(indexPath.section==0){
NSString*会话名称=[self.parentDetailArray valueForKey:@“会话名称”];
NSString*VICENUE=[session_name stringByAppendingString:[self.parentDetailArray valueForKey:@“VICENUE”];
NSString*tmp_名称_地点=[会话时间字符串通过追加字符串:地点];
如果(![self.parentDetailArray valueForKey:@“speakers”]| |![[self.parentDetailArray valueForKey:@“speakers”]isEqual:@“”)
{
NSString*扬声器标签=@“扬声器:”;
NSString*扬声器=[[NSString alloc]init];
speakers=[self.parentDetailArray valueForKey:@“speakers”];
扬声器=[speaker_标签stringByAppendingString:speakers];
tmp_名称_地点=[扬声器字符串通过附加字符串:tmp_名称_地点];
}
NSLog(@“%@”,tmp_名称_场馆);
CGSize detailTextViewSize=[tmp_name_场馆大小[UIFont FONTWITHFONT:@“Roboto Light”大小:18]约束大小:CGSizeMake(296,FLT_MAX)lineBreakMode:UILineBreakModeTailTruncation];
如果(detailTextViewSize.height tmp\U name\U Vincement.length)
{
返回detailTextViewSize.height;
}
其他的
{
detailTextViewSize.height=[tmp_name_vention length];//我只是想在这里获得正确的边距。
返回detailTextViewSize.height;
}
}

如果我的最后一条评论是正确的,当你的问题有答案时。如果单元格大小调整,没有最简单的方法来定位单元格内容。因此我发现这个解决方案对我来说是可行的。我用简单的方法创建单元格,没有任何边距等,创建后就可以了-我有所有的大小,可以操作它

首先,您需要创建单元格并计算或设置所需的边距

....
// 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之外,因为在这种情况下,所有其他单元格框架的计算方式都是正确的,如果您将来想使用它,它将正常工作。

如果我最后的评论是正确的,那么当您的问题得到答案时。如果单元格大小调整,没有最简单的方法来定位单元格内容。因此我发现这个解决方案对我来说没问题。我用简单的方法创建单元格,没有任何边距等等,创建之后就可以了——我有所有的尺寸,可以操作它

首先,您需要创建单元格并计算或设置所需的边距

....
// 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之外,因为在这种情况下,所有其他单元格帧的计算方式都是正确的,如果您将来想使用它,它将正常工作。

如果您在此处粘贴一些代码,会更好。我已编辑了我的问题并添加了相应的代码。据我所知,您希望使用第一个和最后一个cell具有相同的高度-是吗?中间单元格的高度不有趣……。如果是这样,当您需要计算所有高度并将其分配给此方法之外的单元格时。请注意,如果所有单元格的高度小于表格高度,则需要在顶部和底部单元格中添加高度以覆盖整个表格高度。否。我只想更改在第一个单元格中,而不是在最后一个单元格中。我希望文本上方和下方的空白与文本相同,而不考虑内容。正如您在第一个单元格中看到的,文本上方和下方的空白随内容而变化。mm..因此,实际上您希望将单元格内容置于单元格内部的中心位置(并可能扩展单元格高度以获得更多边距)?如果你在这里粘贴一些代码会更好。我已经编辑了我的问题并添加了相应的代码。据我所知,你希望第一个和最后一个单元格具有相同的高度-是吗?中间单元格的高度不有趣……。如果是,当你需要计算所有高度并将其分配给此方法之外的单元格时。请注意如果所有单元格的高度小于表格高度,此处需要向顶部和底部单元格添加高度以覆盖整个表格高度否。我只希望在第一个单元格中更改,而不是在最后一个单元格中更改。我希望文本上方和下方的空位相同,而不考虑内容。正如您在第一个单元格中所看到的,文本上方和下方的空位是不同的根据content.mm..那么实际上您希望将单元格内容放在单元格内的中心位置(并可能扩展单元格高度以获得更多边距)?