zoukankan      html  css  js  c++  java
  • 使用uilabel重新自调整高度后显示横线和竖线问题

    这个使用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;
        
    }



                        

  • 相关阅读:
    未来简史之数据主义(Dataism)
    10分钟看懂《人类简史》和《未来简史》
    SignalR来做实时Web聊天
    .Net Core应用搭建的分布式邮件系统设计
    AspNetCore-MVC实战系列(四)之结尾
    AspNetCore-MVC实战系列(三)之个人中心
    AspNetCore-MVC实战系列(二)之通过绑定邮箱找回密码
    AspNetCore
    爱留图
    .NetCore上传多文件的几种示例
  • 原文地址:https://www.cnblogs.com/lisa090818/p/3532260.html
Copyright © 2011-2022 走看看