这个使用uilabel自调节高度发现的问题,代码如下:

//content label
            
            NSString *contentValue = ((MessageDetailRecord *)[self.entriesArray objectAtIndex:indexPath.row]).content;
            CGFloat width = 0.0f;
            CGSize orignalSize;
            
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
            if ([GeneralInfo getDeviceSystemVer]){
                
                orignalSize = [contentValue sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:20.0f]}];
                width = orignalSize.width;
                
            }else{
                width =  [contentValue sizeWithFont:[UIFont systemFontOfSize:20.0f ]].width;
                
            }
#pragma clang diagnostic pop
            
            //set the most large width
            if (width > cell.frame.size.width - 90.0f) {
                
                width = cell.frame.size.width - 90.0f;
            }

UILabel *content = [[UILabel alloc]initWithFrame:CGRectMake(0.0f, 0.0f, width, 0.0f)];
            self.messageContentLabel = content;
            self.messageContentLabel.font = [UIFont systemFontOfSize:20.0];
            self.messageContentLabel.backgroundColor = [UIColor clearColor];
            self.messageContentLabel.numberOfLines = 0;
            self.messageContentLabel.adjustsFontSizeToFitWidth = YES;
            self.messageContentLabel.lineBreakMode = NSLineBreakByWordWrapping;
            self.messageContentLabel.backgroundColor = [UIColor colorWithRed:241/255.0f green:241/255.0f blue:241/255.0f alpha:1.0];
            CGRect labelFrameContent = self.messageContentLabel.frame;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
            
            if ([GeneralInfo getDeviceSystemVer]) {
                NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject:self.messageContentLabel.font forKey: NSFontAttributeName];
                
                labelFrameContent.size = [contentValue boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX)
                                                                    options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin
                                                                 attributes:stringAttributes context:nil].size;
            }else{
                
                labelFrameContent.size = [contentValue sizeWithFont:self.messageContentLabel.font
                                                  constrainedToSize:CGSizeMake(width, CGFLOAT_MAX)
                                                      lineBreakMode:self.messageContentLabel.lineBreakMode];
            }
#pragma clang diagnostic pop
            
            //adjust the height
            if (labelFrameContent.size.height < 50.0f) {
                
                labelFrameContent.size.height = 50.0f;
            }
            
            labelFrameContent.size.width += 10.0f;
            if (labelFrameContent.size.width > cell.frame.size.width - 90.0f) {
                
                labelFrameContent.size.width = cell.frame.size.width - 90.0f;
            }
            
            labelFrameContent.origin.x = 70.0f;
            labelFrameContent.origin.y = self.cellDateLabel.frame.size.height + 10.0f;
            self.messageContentLabel.frame = labelFrameContent;
            [cell.contentView addSubview:self.messageContentLabel];

解决方法是使用uitextview来替换即可

UITextView *content = [[UITextView alloc]initWithFrame:CGRectMake(0.0f, 0.0f, width, 0.0f)];
                    self.messageContentLabel = content;
                    [content release];
                    self.messageContentLabel.font = [UIFont systemFontOfSize:16.0f];
                    self.messageContentLabel.backgroundColor = [UIColor clearColor];
                    self.messageContentLabel.scrollEnabled = NO;
                    self.messageContentLabel.userInteractionEnabled = NO;
                    //self.messageContentLabel.numberOfLines = 0;
                    //self.messageContentLabel.adjustsFontSizeToFitWidth = YES;
                    // self.messageContentLabel.lineBreakMode = NSLineBreakByWordWrapping;
                    self.messageContentLabel.backgroundColor = [UIColor colorWithRed:241/255.0f green:241/255.0f blue:241/255.0f alpha:1.0];
                    self.messageContentLabel.text = contentValue;
                    self.messageContentLabel.textColor = [UIColor grayColor];
                    CGRect labelFrameContent = self.messageContentLabel.frame;
                    
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
                    
                    if ([GeneralInfo getDeviceSystemVer])
                    {
                        labelFrameContent.size = [contentValue boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX)
                                                                            options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                                                         attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17.0f]}
                                                                            context:nil].size;
                    }
                    else
                    {
                        labelFrameContent.size = [contentValue sizeWithFont:self.messageContentLabel.font constrainedToSize:CGSizeMake(width, CGFLOAT_MAX)];
                    }
#pragma clang diagnostic pop

注意:这个在ios 7.0以前的版本如果使用uitextview的话布局会有问题,如果使用uilabel的话在ios7.0上又会出现横竖线。所以最终的解决方案是区分当前的版本对待。

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //delete the unnessary separator line
    
    static NSString *CellIndentifier = @"MessageDetailList";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIndentifier];
    CGRect cellFrame =[cell frame];
    
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIndentifier] autorelease];
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    
    if (self.entriesArray &&
        [self.entriesArray count] > 0) {
        
        while ([cell.contentView.subviews lastObject] != nil)
        {
            [(UIView*)[cell.contentView.subviews lastObject] removeFromSuperview];
        }
        UILabel *dateLabel = [[UILabel alloc]initWithFrame:CGRectMake(cell.frame.size.width/4, 5.0f, cell.frame.size.width/2, 0.0f)];
        self.cellDateLabel = dateLabel;
        [dateLabel release];
        self.cellDateLabel.text = ((MessageDetailRecord *)[self.entriesArray objectAtIndex:indexPath.row]).date;
        self.cellDateLabel.textAlignment = NSTextAlignmentCenter;
        self.cellDateLabel.font = [UIFont systemFontOfSize:14.0];
        self.cellDateLabel.textColor = [UIColor grayColor];
        self.cellDateLabel.backgroundColor = [UIColor clearColor];
        self.cellDateLabel.numberOfLines = 0;
        self.cellDateLabel.lineBreakMode = NSLineBreakByWordWrapping;
        CGRect labelFrameN = self.cellDateLabel.frame;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
        
        if ([GeneralInfo getDeviceSystemVer]) {
            NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject:self.cellDateLabel.font forKey: NSFontAttributeName];
            
            labelFrameN.size = [self.cellDateLabel.text boundingRectWithSize:CGSizeMake(self.cellDateLabel.frame.size.width, CGFLOAT_MAX)
                                                                     options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin
                                                                  attributes:stringAttributes context:nil].size;
        }else{
            
            labelFrameN.size = [self.cellDateLabel.text sizeWithFont:self.cellDateLabel.font
                                                   constrainedToSize:CGSizeMake(self.cellDateLabel.frame.size.width, CGFLOAT_MAX)
                                                       lineBreakMode:self.cellDateLabel.lineBreakMode];
        }
#pragma clang diagnostic pop
        
        self.cellDateLabel.frame = labelFrameN;
        [cell.contentView addSubview:self.cellDateLabel];
        
        UIImageView *icon = [[UIImageView alloc]initWithFrame:CGRectMake(10.0f, self.cellDateLabel.frame.size.height + 10.0f,50.0f, 50.0f)];
        
        self.imageView = icon;
        self.imageView.image = [UIImage imageNamed:@"01_login_userdefaultavatar@2x.png"];
        self.imageView.backgroundColor = [UIColor clearColor];
        if (self.headImagesArray) {
            
            [self.headImagesArray insertObject:self.imageView atIndex:indexPath.row];
        }
        
        [cell.contentView addSubview:[self.headImagesArray  objectAtIndex:indexPath.row]];
        [icon release];
        
        
        //the content bg image
        UIImageView *bgimageView = [[UIImageView alloc]initWithFrame:CGRectMake(65.0f, self.cellDateLabel.frame.size.height + 10.0f,cell.frame.size.width/3*2, 50.0f)];
        
        self.messageContentbgImageView = bgimageView;
        self.messageContentbgImageView.image = [UIImage imageNamed:@"04_message_messagebubble_gray@2x.png"];
        self.messageContentbgImageView.backgroundColor = [UIColor clearColor];
        
        [cell.contentView addSubview:self.messageContentbgImageView];
        [bgimageView release];
        
        
        //content label
        
        NSString *contentValue = ((MessageDetailRecord *)[self.entriesArray objectAtIndex:indexPath.row]).content;
        CGFloat width = 0.0f;
        CGSize orignalSize;
        
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
        if ([GeneralInfo getDeviceSystemVer]){
            
            orignalSize = [contentValue sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:20.0f]}];
            width = orignalSize.width;
            
        }else{
            width =  [contentValue sizeWithFont:[UIFont systemFontOfSize:20.0f ]].width;
            
        }
#pragma clang diagnostic pop
        
        //set the most large width
        if (width > cell.frame.size.width - 90.0f) {
            
            width = cell.frame.size.width - 90.0f;
        }
        
        CGRect labelFrameContent;
        if ([GeneralInfo getDeviceSystemVer]) {
            UITextView *content = [[UITextView alloc]initWithFrame:CGRectMake(0.0f, 0.0f, width, 0.0f)];
            self.messageContentLabel = content;
            [content release];
            self.messageContentLabel.font = [UIFont systemFontOfSize:16.0f];
            self.messageContentLabel.backgroundColor = [UIColor clearColor];
            self.messageContentLabel.scrollEnabled = NO;
            self.messageContentLabel.userInteractionEnabled = NO;
            self.messageContentLabel.backgroundColor = [UIColor colorWithRed:241/255.0f green:241/255.0f blue:241/255.0f alpha:1.0];
            self.messageContentLabel.text = contentValue;
            self.messageContentLabel.textColor = [UIColor grayColor];
            labelFrameContent = self.messageContentLabel.frame;
            
        }
        else
        {
            UILabel *content = [[UILabel alloc]initWithFrame:CGRectMake(0.0f, 0.0f, width, 0.0f)];
            self.messageContent = content;
            [content release];
            self.messageContent.font = [UIFont systemFontOfSize:20.0];
            self.messageContent.backgroundColor = [UIColor clearColor];
            self.messageContent.numberOfLines = 0;
            self.messageContent.adjustsFontSizeToFitWidth = YES;
            self.messageContent.lineBreakMode = NSLineBreakByWordWrapping;
            self.messageContent.backgroundColor = [UIColor colorWithRed:241/255.0f green:241/255.0f blue:241/255.0f alpha:1.0];
            labelFrameContent = self.messageContent.frame;
            
            
        }
        
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
        
        if ([GeneralInfo getDeviceSystemVer])
        {
            labelFrameContent.size = [contentValue boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX)
                                                                options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                                             attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17.0f]}
                                                                context:nil].size;
        }
        else
        {
            //            labelFrameContent.size = [contentValue sizeWithFont:self.messageContentLabel.font constrainedToSize:CGSizeMake(width, CGFLOAT_MAX)];
            labelFrameContent.size = [contentValue sizeWithFont:self.messageContent.font
                                              constrainedToSize:CGSizeMake(width, CGFLOAT_MAX)
                                                  lineBreakMode:self.messageContent.lineBreakMode];
        }
#pragma clang diagnostic pop
        
        /*#pragma clang diagnostic push
         #pragma clang diagnostic ignored "-Wdeprecated-declarations"
         
         if ([GeneralInfo getDeviceSystemVer]) {
         NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject:self.messageContentLabel.font forKey: NSFontAttributeName];
         
         labelFrameContent.size = [contentValue boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX)
         options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin
         attributes:stringAttributes context:nil].size;
         }else{
         
         labelFrameContent.size = [contentValue sizeWithFont:self.messageContentLabel.font
         constrainedToSize:CGSizeMake(width, CGFLOAT_MAX)
         lineBreakMode:self.messageContentLabel.lineBreakMode];
         }
         #pragma clang diagnostic pop*/
        
        //adjust the height
        if (labelFrameContent.size.height < 50.0f) {
            
            labelFrameContent.size.height = 50.0f;
        }
        
        labelFrameContent.size.width += 10.0f;
        if (labelFrameContent.size.width > cell.frame.size.width - 90.0f) {
            
            labelFrameContent.size.width = cell.frame.size.width - 90.0f;
        }
        
        labelFrameContent.origin.x = 70.0f;
        labelFrameContent.origin.y = self.cellDateLabel.frame.size.height + 10.0f;
        if ([GeneralInfo getDeviceSystemVer]){
            self.messageContentLabel.frame = labelFrameContent;
            [cell.contentView addSubview:self.messageContentLabel];
            
        }else
        {
            self.messageContent.frame = labelFrameContent;
            [cell.contentView addSubview:self.messageContent];
            
            
        }
        
        if (![GeneralInfo getDeviceSystemVer]){
        UILabel *innerlabel = [[UILabel alloc]initWithFrame:CGRectMake(5.0f, 0.0f, self.messageContent.frame.size.width - 10.0f, self.messageContent.frame.size.height)];
        innerlabel.textAlignment = NSTextAlignmentLeft;
        innerlabel.font = [UIFont systemFontOfSize:16.0];
        innerlabel.textColor = [UIColor grayColor];
        innerlabel.backgroundColor = [UIColor clearColor];
        innerlabel.text = contentValue;
        innerlabel.numberOfLines = 0;
        innerlabel.adjustsFontSizeToFitWidth = YES;
        innerlabel.lineBreakMode = NSLineBreakByWordWrapping;
        innerlabel.backgroundColor = [UIColor colorWithRed:241/255.0f green:241/255.0f blue:241/255.0f alpha:1.0];
        self.innerLabel = innerlabel;
        [self.messageContent addSubview:innerlabel];
        [innerlabel release];
        }
        
        //then the image should first check the type
        NSString *type = ((MessageDetailRecord *)[self.entriesArray objectAtIndex:indexPath.row]).currentMessageType;
        if ([type isEqualToString:@"self"])
        {
            //then readjust the frame
            ((UIImageView *)[self.headImagesArray  objectAtIndex:indexPath.row]).frame = CGRectMake(cell.frame.size.width - 50.0f, self.cellDateLabel.frame.size.height + 10.0f, 40.0f, 40.0f);
            
            self.imageView.frame = CGRectMake(cell.frame.size.width - 60.0f, self.cellDateLabel.frame.size.height + 10.0f, 50.0f, 50.0f);
            
            self.messageContentbgImageView.image = [UIImage imageNamed:@"04_message_messagebubble_blue@2x.png"];
            
            self.messageContentbgImageView.frame = CGRectMake(cell.frame.size.width - 65.0f - cell.frame.size.width/3*2, self.cellDateLabel.frame.size.height + 10.0f, cell.frame.size.width/3*2, 50.0f);
            
            if ([GeneralInfo getDeviceSystemVer]){
                self.messageContentLabel.backgroundColor = [UIColor colorWithRed:236/255.0f green:247/255.0f blue:253/255.0f alpha:1.0];
                
                self.messageContentLabel.frame = CGRectMake(cell.frame.size.width - labelFrameContent.size.width - 70.0f, self.cellDateLabel.frame.size.height + 10.0f, labelFrameContent.size.width, labelFrameContent.size.height);
            }else
            {
                self.messageContent.backgroundColor = [UIColor colorWithRed:236/255.0f green:247/255.0f blue:253/255.0f alpha:1.0];
                
                self.messageContent.frame = CGRectMake(cell.frame.size.width - labelFrameContent.size.width - 70.0f, self.cellDateLabel.frame.size.height + 10.0f, labelFrameContent.size.width, labelFrameContent.size.height);
                self.innerLabel.backgroundColor = [UIColor colorWithRed:236/255.0f green:247/255.0f blue:253/255.0f alpha:1.0];
            }
            
            
        }
        
        if ([GeneralInfo getDeviceSystemVer]){
            cellFrame.size.height = self.cellDateLabel.frame.size.height + self.messageContentLabel.frame.size.height + 20.0f;
        }else
        {
            cellFrame.size.height = self.cellDateLabel.frame.size.height + self.messageContent.frame.size.height + 20.0f;
            
        }
        [cell setFrame:cellFrame];
        
        self.record = [self.entriesArray objectAtIndex:indexPath.row];
        if(!self.record.appIcon) {
            
            if (self.localTableView.dragging == NO && self.localTableView.decelerating == NO)
            {
                //if has the valid image url then should add to the downloader list
                NSString *startURL = self.record.friendHeadImageUrl;
                NSLog(@"the starturl is %@",startURL);
                if (startURL &&
                    (NSNull *)startURL != [NSNull null] &&
                    [startURL length] > 0) {
                    NSString *endURL = [NSURL URLWithString:startURL];
                    if (endURL) {
                        
                        [self startIconDownload:self.record forIndexPath:indexPath];
                        
                    }
                }
                
            }
        }else{
            
            //should add the new bg image
            ((UIImageView *)[self.headImagesArray objectAtIndex:indexPath.row]).image = [UIImage imageNamed:@"friend_head_image_bg"];
            UIImageView *tmp = [[UIImageView alloc]initWithFrame:CGRectMake(5.0f, 5.0f, 40.0f, 40.0f)];
            tmp.image = self.record.appIcon;
            [tmp setContentMode:UIViewContentModeScaleAspectFit];
            [((UIImageView *)[self.headImagesArray objectAtIndex:indexPath.row]) addSubview:tmp];
            [tmp release];
            
        }
        
    }
    return cell;
    
}

使用uilabel重新自调整高度后显示横线和竖线问题的更多相关文章

  1. javascript超过容器后显示省略号效果(兼容一行或者多行)

    javascript超过容器后显示省略号效果       在实际的项目中,由于文字内容的长度不确定性和页面布局的固定性,难免会出现文字内容超过div(或其他标签,下同)区域的情况,此时比较好的做法就是 ...

  2. css强制换行显示省略号之显示两行后显示省略号

    1,首先来一个固定宽度,在一行显示,超出隐藏,显示省略号的样式 display:block; white-space:nowrap; overflow:hidden; text-overflow:el ...

  3. Advanced Office Password Recovery安装后显示是英文版的

    一些才开始接触Advanced Office Password Recovery(即AOPR)的朋友,在安装Advanced Office Password Recovery的时候可能发现Advanc ...

  4. 微信支付 发布后显示 System:access_denied

    微信支付发布后显示 System:access_denied (android)或 System:not_allow(IOS) 我们项目用的是.NET MVC3 授权目录是:http://mynetd ...

  5. JavaScript学习笔记-元素在滚动条滑动一定高度后自动置顶

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  6. 解决mysql无法插入中文数据及插入后显示乱码的问题

    (1)废话不多说就是使用mysql数据库的时候无法输入中文,可以输入中文后显示的又是乱码!! (2开始解决问题: 第一步:找到安装mysql的目录找到 my.ini 文件: 第二步:使用记事本打开my ...

  7. [转]装完CentOS后,重新开机启动后显示: Initial setup of CentOS Linux 7 (core)

    转:装完Centos7提示Initial setup of CentOS Linux 7 (core)   在用U盘装完CentOS后,重新开机启动后显示: Initial setup of Cent ...

  8. 装完RHEL7后,重新开机启动后显示:Initial setup of CentOS Linux 7 (core) 提示license报错

    装完RHEL7后,重新开机启动后显示: 1) [x] Creat user 2) [!] License information (no user will be created) (license ...

  9. AngularJS 表单提交后显示验证信息与失焦后显示验证信息

    虽然说AngularJS的实时表单验证非常有用,非常高效方便,但是当用户还没有完成输入时便弹出一个错误提示,这种体验是非常糟糕的. 正常的表单验证逻辑应该是在用户提交表单后或完成当前字段中的输入后,再 ...

随机推荐

  1. 【搜索 ex-BFS】bzoj2346: [Baltic 2011]Lamp

    关于图中边权非零即一的宽度优先搜索 Description 译自 BalticOI 2011 Day1 T3「Switch the Lamp On」有一种正方形的电路元件,在它的两组相对顶点中,有一组 ...

  2. 初涉k-d tree

    听说k-d tree是一个骗分的好东西?(但是复杂度差评??? 还听说绍一的kdt常数特别小? KDT是什么 KDT的全称是k-degree tree,顾名思义,这是一种处理多维空间的数据结构. 例如 ...

  3. 转载:jquery.ajax之beforeSend方法使用介绍

    常见的一种效果,在用ajax请求时,没有返回前会出现前出现一个转动的loading小图标或者“内容加载中..”,用来告知用户正在请求数据.这个就可以用beforeSend方法来实现. 下载demo:a ...

  4. Python中的序列化以及pickle和json模块介绍

    Python中的序列化指的是在程序运行期间,变量都是在内存中保存着的,如果我们想保留一些运行中的变量值,就可以使用序列化操作把变量内容从内存保存到磁盘中,在Python中这个操作叫pickling,等 ...

  5. android-csv-variants

    android-csv-variants https://github.com/zawn/android-csv-variants/ 目的 用于在Android Gradle构建时通过CSV文件配置V ...

  6. jmx_exportter+prometheus+grafana监控hadoop

    0.介绍(摘录自https://www.hi-linux.com/posts/25047.html) 什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和 ...

  7. Debian7配置LAMP(Apache/MySQL/PHP)环境及搭建建站

    完整Debian7配置LAMP(Apache/MySQL/PHP)环境及搭建建站 第一.安装和配置Apache Web服务器 运行升级命令来确保我们的系统组件各方面都是最新的. apt-get upd ...

  8. C语言常见的函数调用

    C语言常见的函数调用 isatty,函数名,主要功能是检查设备类型,判断文件描述词是否为终端机. 函数名: isatty 用 法: int isatty(int desc); 返回值:如果参数desc ...

  9. TOJ 2710: 过河 路径压缩

    2710: 过河  Time Limit(Common/Java):1000MS/10000MS     Memory Limit:65536KByteTotal Submit: 32         ...

  10. 九度oj 题目1120:全排列

    题目描述: 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列. 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中 ...