【问题标题】:how to Change the custom tableview cell height and a textview height according to its content in textview如何根据文本视图中的内容更改自定义表格视图单元格高度和文本视图高度
【发布时间】:2016-02-10 05:03:37
【问题描述】:

我创建了一个带有文本视图的自定义单元格。我需要在不使用自动布局的情况下根据textview中的内容扩展textview的高度和自定义单元格的高度。谁能帮帮我

这是代码:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}

- (CGFloat)tableView:(UITableView *)tableView  heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 80;   
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return sendername.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *CellIdentifier1 = @"MenuCtrl";

tsecureMsgConCell *cell = [tabVieConv dequeueReusableCellWithIdentifier:CellIdentifier1];

if (cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MsgConCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}

cell.userName.text       = [sendername objectAtIndex:indexPath.row];
cell.msgContentTxView.text     = [msgContents objectAtIndex:indexPath.row];


NSString * sentDateCell  = [msgSenddate objectAtIndex:indexPath.row];
NSString * replyDateCell = [msgRevidate objectAtIndex:indexPath.row];
thredIdCell              = [TSecureMsgId objectAtIndex:indexPath.row];

if ([sentDateCell isEqualToString:@"NULL"])
{
     cell.dateLbl.text = [msgRevidate objectAtIndex:indexPath.row];
     cell.timeLbl.text = [msgRecTime objectAtIndex:indexPath.row];
     cell.imgVew.image = [UIImage imageNamed:@"recive.png"];
}

else if ([replyDateCell isEqualToString:@"NULL"])
{
    cell.dateLbl.text = [msgSenddate objectAtIndex:indexPath.row];
    cell.timeLbl.text = [msgSendTime objectAtIndex:indexPath.row];
    cell.imgVew.image = [UIImage imageNamed:@"sent.png"];
}

return cell;

}

msgContentTxView - 是我的文本视图

【问题讨论】:

标签: ios objective-c


【解决方案1】:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSUInteger row = indexPath.row;
    if (row != NSNotFound)
    {


        if ([exapmlestring length] > 0)
        {
            CGFloat padding = 17.0f;

            CGFloat labelWidth = self.tableview.bounds.size.width - padding*2;
            NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                                  [UIFont fontWithName:@"HelveticaNeue" size:17.0], NSFontAttributeName,
                                                  nil];

            NSAttributedString *text = [[NSAttributedString alloc] initWithString:exapmlestring attributes:attributesDictionary];
            NSStringDrawingOptions options = NSStringDrawingUsesLineFragmentOrigin;

///size
            CGRect boundingRect = [text boundingRectWithSize:CGSizeMake(labelWidth, CGFLOAT_MAX)
                                                     options:options
                                                     context:nil];


            boundingRect.size.height = boundingRect.size.height + 100;

            return (CGFloat) (ceil(boundingRect.size.height) + padding*2);
        }
    }

    return 0;
}

【讨论】:

  • boundingRect 使用相同的方法来获取文本字段的高度