Tableview单元格从底部覆盖

时间:2017-03-30 04:41:32

标签: ios objective-c uitableview

我正在使用XIB的tableview单元创建一个tableview。 当我将tableview单元格与Tableview集成并运行它时,它显示不完美,它显示我覆盖。

图片是

enter image description here

代码是

static NSString *cellIdentifier =@"DiscussionTableViewCell";

            DiscussionTableViewCell *cell = (DiscussionTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
            if (cell == nil) {

                NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"DiscussionTableViewCell" owner:self options:nil];
                cell = [topLevelObjects objectAtIndex:0];
                cell.selectionStyle=UITableViewCellSelectionStyleNone;
                // [cell.btnConnect addTarget:self action:@selector(btnUserConnectClick:) forControlEvents:UIControlEventTouchUpInside];
                // [cell.btnNotnow addTarget:self action:@selector(btnNotNowClick:) forControlEvents:UIControlEventTouchUpInside];
                 self.cellHeight  += cell.frame.size.height;
                NSLog(@"Cell height is %f",self.cellHeight);

5 个答案:

答案 0 :(得分:4)

按照以下步骤操作:

  1. 将标签numberOfLines属性更改为零
  2. enter image description here

    1. 为标签添加约束
    2. enter image description here

      1. 更改高度约束关系
      2. enter image description here

        1. 实现这两个tableView委托方法

          func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat{
                return 55
          }
          
          func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{
                return UITableViewAutomaticDimension
          }
          
        2. 现在运行你的项目并检查。

          预期输出:

          enter image description here

答案 1 :(得分:0)

你的问题是你的细胞高度和tableview行高不同,你可以通过两种方式解决这个问题

  • 将AutoLayout实施到自定义单元格, 通过这种方式,您的单元格将根据行高增长/缩小。

  • 第二种方法是使行高与单元格高度相同 使用-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath委托方法

    只需在上面的委托方法中返回您的单元格高度即可解决您的问题。

答案 2 :(得分:0)

如果您已将故事板中的UILabel添加到UITableviewCell,请确保您已根据以下操作进行了所有更改:

在Storyboard中执行此更改: 确保已将UILabel的顶部,底部,前导和尾部约束赋予UITableViewCell contentView。

  1. 然后将UILabel的行数设置为'0',也将Line Break设置为“Word Wrap”。
  2. enter image description here

    1. 在UITableViewDelegate的Controller中 heightForRow 方法:

        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
        {
          tableView.estimatedRowHeight = 50;
          return UITableViewAutomaticDimension
        } 
      
    2. 这将有助于解决上述要求。

答案 3 :(得分:0)

我用来动态计算单元格内容高度的代码是:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (_arrMainTable.count && (indexPath.row < _arrMainTable.count))
    {
        NSDictionary *dict = [_arrMainTable objectAtIndex:indexPath.row];
        return [self expectedLabelHeight:dict];
    }
    return 0;
}

- (CGFloat)expectedLabelHeight:(NSDictionary *)dict
{
    CGSize boundingSize = CGSizeMake(CGRectGetWidth(_faqTableView.bounds)-20.0, CGFLOAT_MAX);
    UIFont *font = [UIFont fontWithName:@"Roboto-Regular" size:17];
    CGRect qstnRect = [dict[@"question"] boundingRectWithSize:boundingSize options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes: @{NSFontAttributeName:font} context:nil];

    font = [UIFont fontWithName:@"Roboto-Light" size:14];
    CGRect ansRect = [dict[@"answer"] boundingRectWithSize:boundingSize options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes: @{NSFontAttributeName:font} context:nil];

    return (qstnRect.size.height+ansRect.size.height+30); // 30 is the height of another label whose height is fixed to 30pts.
}

答案 4 :(得分:-1)

有很多方法可以在具有动态高度的桌面视图中设计单元格布局

这里我正在分享一些与动态高度相关的链接,并且单元格自动布局将有助于解决您的问题。

Raywenderlich: https://www.raywenderlich.com/129059/self-sizing-table-view-cells

AppCoda: http://www.appcoda.com/self-sizing-cells/

回答SO:

希望这可以帮助您解决问题。