zoukankan      html  css  js  c++  java
  • 精简计算UITableView文本高度

    精简计算UITableView文本高度

    本人视频教程系类   iOS中CALayer的使用

    最终效果:

    核心源码(计算文本高度的类)

    NSString+StringHeight.h 与 NSString+StringHeight.m

    //
    //  NSString+StringHeight.h
    //  USA
    //
    //  Created by YouXianMing on 14/12/10.
    //  Copyright (c) 2014年 fuhuaqi. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
    
    @interface NSString (StringHeight)
    
    - (CGFloat)heightWithLabelFont:(UIFont *)font withLabelWidth:(CGFloat)width;
    
    @end
    //
    //  NSString+StringHeight.m
    //  USA
    //
    //  Created by YouXianMing on 14/12/10.
    //  Copyright (c) 2014年 fuhuaqi. All rights reserved.
    //
    
    #import "NSString+StringHeight.h"
    
    @implementation NSString (StringHeight)
    
    - (CGFloat)heightWithLabelFont:(UIFont *)font withLabelWidth:(CGFloat)width {
        CGFloat height = 0;
        
        if (self.length == 0) {
            height = 0;
        } else {
    
            // 字体
            NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:18.f]};
            if (font) {
                attribute = @{NSFontAttributeName: font};
            }
            
            // 尺寸
            CGSize retSize = [self boundingRectWithSize:CGSizeMake(width, MAXFLOAT)
                                                options:
                              NSStringDrawingTruncatesLastVisibleLine |
                              NSStringDrawingUsesLineFragmentOrigin |
                              NSStringDrawingUsesFontLeading
                                             attributes:attribute
                                                context:nil].size;
            
            height = retSize.height;
        }
        
        return height;
    }
    
    @end

    cell的源码:

    WordCell.h 与 WordCell.m

    //
    //  WordCell.h
    //  WordHeight
    //
    //  Created by YouXianMing on 14/12/16.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface WordCell : UITableViewCell
    
    @property (nonatomic, strong) UILabel   *words;
    
    @end
    //
    //  WordCell.m
    //  WordHeight
    //
    //  Created by YouXianMing on 14/12/16.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "WordCell.h"
    
    @implementation WordCell
    
    - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self) {
            _words               = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 0)];
            _words.font          = [UIFont systemFontOfSize:18.f];
            _words.textColor     = [UIColor grayColor];
            _words.numberOfLines = 0;
            
            [self addSubview:_words];
        }
        
        return self;
    }
    
    @end

    控制器源码:

    //
    //  ViewController.m
    //  WordHeight
    //
    //  Created by YouXianMing on 14/12/16.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "WordCell.h"
    #import "NSString+StringHeight.h"
    
    static NSString *wordCellReused = @"WordCell";
    
    @interface ViewController ()<UITableViewDelegate, UITableViewDataSource>
    
    @property (nonatomic, strong) UITableView    *tableView;
    @property (nonatomic, strong) NSMutableArray *wordsArray;
    @property (nonatomic, strong) NSMutableArray *wordsArrayHeight;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        // 关闭状态栏
        [UIApplication sharedApplication].statusBarHidden = YES;
        
        // 创建数据源(谷歌翻译,莫见笑)
        _wordsArray = [NSMutableArray array];
        [_wordsArray addObject:
         @"游贤明是一个iOS开发工程师,热爱技术,热爱生活,乐于奉献,喜欢打游戏,喜欢吃东西,是个吃货,喜欢学习,深信天道酬勤!"];
        [_wordsArray addObject:
         @"遊賢明はiOS開発エンジニア、愛する技術で、生活を愛し、献身、ゲームが好き、好きなものを食べて、美食愛好家、天道酬勤を学ぶことが好きで、信じ!"];
        [_wordsArray addObject:
         @"YouXianMing ist ein ios - entwickler, liebe, Leben, liebe, hingabe, Wie Spiele, der Gern Essen, ist ein Nahrungsmittel, Wie Lernen, Davon überzeugt, dass Gott!!!!!!!"];
        [_wordsArray addObject:
         @"YouXianMing 한 iOS 개발 엔지니어, 사랑 사랑 기술, 생활, 기꺼이 바치다, 좋아하는 게임만 좋아하는 것을 좋아하는 사람이다 가축, 학습, 확신하다 천도 보수 자주!"];
        [_wordsArray addObject:
         @"¡Gira el sabio es un ingeniero, el desarrollo de la tecnología de los ama, ama la vida, dedicación, como jugar el juego, me gusta comer, es un tragón, como el aprendizaje, convencidos de que Philip!"];
        [_wordsArray addObject:
         @"ว่ายน้ำที่ชาญฉลาดเป็น iOS วิศวกรพัฒนาเทคโนโลยีและรักชีวิตรักและทุ่มเทและชอบเล่นเกมชอบกินอะไรดีเลยชอบการเรียนรู้และเชื่อว่าไม่มีอะไรเลย"];
        [_wordsArray addObject:
         @"Nager sage est un ingénieur, le développement de la technologie iOS amour, de l'amour de la vie, de dévouement, de jouer le jeu, aime manger, c'est un bon à rien, comme l'apprentissage, convaincu que Tiandaochouqin!"];
        [_wordsArray addObject:
         @""];
        
        // 创建存储数据源长度的数组
        _wordsArrayHeight = [NSMutableArray array];
        for (int i = 0; i < _wordsArray.count; i++) {
            NSString *tmpStr = _wordsArray[i];
            CGFloat height   = [tmpStr heightWithLabelFont:[UIFont systemFontOfSize:18.f] withLabelWidth:320];
            [_wordsArrayHeight addObject:@(height)];
        }
     
        // 创建tableView
        _tableView            = [[UITableView alloc] initWithFrame:self.view.bounds
                                                             style:UITableViewStylePlain];
        _tableView.delegate   = self;
        _tableView.dataSource = self;
        [_tableView registerClass:[WordCell class]
           forCellReuseIdentifier:wordCellReused];
        [self.view addSubview:_tableView];
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return [_wordsArray count];
    }
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        WordCell *cell      = [tableView dequeueReusableCellWithIdentifier:wordCellReused];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    
        // 获取文本
        cell.words.text     = _wordsArray[indexPath.row];
        
        // 重新设定尺寸
        cell.words.frame    = CGRectMake(0, 0, 320, 0);
        
        // 约束后适配
        [cell.words sizeToFit];
        
        return cell;
    }
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
        return [_wordsArrayHeight[indexPath.row] floatValue];
    }
    
    @end

    几个需要注意的地方:

  • 相关阅读:
    AOP的相关理论介绍
    代码访问数据库时没有报错一直转圈,MySQL不同驱动版本的连接方式
    Linux(CentOS7)设置固定获取IP地址
    NodeJS的安装与配置
    IDEA启动tomcat访问localhost:8080出现404错误
    Win10笔记本电脑外接显示器,如何在笔记本合上的时候让他继续在显示器上使用
    SpringBoot集成Swagger-Bootstrap-UI(已改名为Knife4j)
    Redis学习之Jedis的操作和使用
    SpringBoot整合Swagger2,搭建Restful API在线文档
    IDEA创建SpringBoot项目时出现:Initialization failed for 'https://start.spring.io' Please check URL, network and proxy settings.
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4166709.html
Copyright © 2011-2022 走看看