Tell UITableCell the height of UItextview Dynamically

拟墨画扇 提交于 2019-12-12 01:54:45

问题


Currently I'm making a Messaging App but recently the tableCells are not resizing as expected. I've used the new iOS 8 relative height functionality but still nothing changes. All the design it's being done via Storyboard so far everything works as expected but need to tell the tableCell to resize based on the textview height. here how it's currently looking.

http://i.imgur.com/lqoxxJV.png

The Code I'm using is the following.

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

    NSDictionary* chatMessage = [_conversation objectAtIndex:indexPath.row];

    // Show If type is String
    if ([chatMessage[@"type"] isEqualToString:@"string"]) {

        // if its me
        if([chatMessage[@"user_sender"] isEqualToString:_user_sender]){



            NSString *CellIdentifier = @"fromMe";
            FromMeTableViewCell *cell = [table dequeueReusableCellWithIdentifier:CellIdentifier];
            [cell.message_me setNeedsLayout];
            [cell.message_me layoutIfNeeded];
            cell.message_me.clipsToBounds = YES;
            cell.message_me.textContainerInset = UIEdgeInsetsMake(8.0, 8.0, 7.0, 8.0);
            cell.message_me.text = chatMessage[@"msg"];
            cell.message_date_me.text = [NSString stringWithFormat:@"%@", chatMessage[@"message_date"]];
            cell.avatar_message_me.clipsToBounds = YES;
            cell.avatar_message_me.layer.cornerRadius = cell.avatar_message_me.frame.size.width /2;
            cell.avatar_message_me.image = [UIImage imageNamed:@"amber.png"];

            return cell;

        }
        // it its other user
        else {

            NSString *CellIdentifier = @"fromThem";
            FromThemTableViewCell *cell = [table dequeueReusableCellWithIdentifier:CellIdentifier];
            [cell.message_them setNeedsLayout];
            [cell.message_them layoutIfNeeded];
            cell.message_them.clipsToBounds = YES;
            cell.message_them.textContainerInset = UIEdgeInsetsMake(8.0, 8.0, 7.0, 8.0);
            cell.message_them.text = chatMessage[@"msg"];
            cell.message_date_them.text = [NSString stringWithFormat:@"%@", chatMessage[@"message_date"]];
            cell.avatar_message_them.clipsToBounds = YES;
            cell.avatar_message_them.layer.cornerRadius = cell.avatar_message_them.frame.size.width /2;
            cell.avatar_message_them.image = [UIImage imageNamed:@"jenny.png"];

            return cell;

        }
    }

    // Show if type is Image File

        else if ([chatMessage[@"type"] isEqualToString:@"img"]){

            // if its me
            if(![chatMessage[@"user_sender"] isEqualToString:_user_sender]){

                NSString *CellIdentifier = @"fromThemImage";
                FromThemImageTableCell *cell = [table dequeueReusableCellWithIdentifier:CellIdentifier];
                cell.image_type_them.image = [UIImage imageNamed:@"foto.jpeg"];
                cell.message_date_them.text = [NSString stringWithFormat:@"%@", chatMessage[@"message_date"]];
                return cell;

            }
            // if its other user
            else {

                NSString *CellIdentifier = @"fromMeImage";
                FromMeImageTableCell *cell = [table dequeueReusableCellWithIdentifier:CellIdentifier];
                cell.image_type_me.image = [UIImage imageNamed:@"foto.jpeg"];
                cell.message_date_me.text = [NSString stringWithFormat:@"%@", chatMessage[@"message_date"]];
                return cell;
            }


        }

    else if ([chatMessage[@"type"] isEqualToString:@"file"]){

        NSLog(@"Type: %@", chatMessage[@"type"]);

        NSString *CellIdentifier = @"fromThemFile";
        FromThemFileTableCell *cell = [table dequeueReusableCellWithIdentifier:CellIdentifier];
        cell.message_date_them.text = [NSString stringWithFormat:@"%@", chatMessage[@"message_date"]];
        cell.file_name_them.text = chatMessage[@"msg"];

        cell.file_type_them.contentMode = UIViewContentModeScaleAspectFill;

        NSArray *formats = [chatMessage[@"msg"] componentsSeparatedByString:@"."];

        // PDF Format

        if ([formats[1] isEqualToString:@"pdf"]) {
            cell.file_type_them.image = [UIImage imageNamed:@"pdf.png"];
        }

        // Word Format

        if ([formats[1] isEqualToString:@"doc"]) {
            cell.file_type_them.image = [UIImage imageNamed:@"doc.png"];
        }

        if ([formats[1] isEqualToString:@"docx"]) {
            cell.file_type_them.image = [UIImage imageNamed:@"doc.png"];
        }

        // Power Point Format

        if ([formats[1] isEqualToString:@"pptx"]) {
            cell.file_type_them.image = [UIImage imageNamed:@"ppt.png"];
        }

        if ([formats[1] isEqualToString:@"ppt"]) {
            cell.file_type_them.image = [UIImage imageNamed:@"ppt.png"];
        }

        // Excel Format

        if ([formats[1] isEqualToString:@"xls"]) {
            cell.file_type_them.image = [UIImage imageNamed:@"xls.png"];
        }

        if ([formats[1] isEqualToString:@"xlsx"]) {
            cell.file_type_them.image = [UIImage imageNamed:@"xls.png"];
        }


        return cell;


    }

    else {

        // Remember to set this as a default value
        NSString *CellIdentifier = @"fromThem";
        FromThemTableViewCell *cell = [table dequeueReusableCellWithIdentifier:CellIdentifier];
        cell.message_them.text = chatMessage[@"msg"];
        cell.message_date_them.text = [NSString stringWithFormat:@"%@", chatMessage[@"message_date"]];
        return cell;
    }

}

The constraints I've been using for the textview to be able to expand and look like this is the following.

http://i.imgur.com/Kjva3ES.png

Any Idea how to fix this on a decent way..?


回答1:


If your UITableViewCells vary in height due to variations in content you need to implement

- (CGFloat)tableView:(UITableView *)tableView 
heightForRowAtIndexPath:(NSIndexPath *)indexPath;

to tell UITableView the height for each row.

In one of my apps this mainly involved calling

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context;

to predict the area needed by my expanding text field, and then adding in some margin.



来源:https://stackoverflow.com/questions/27411099/tell-uitablecell-the-height-of-uitextview-dynamically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!