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

    几个需要注意的地方:

  • 相关阅读:
    VOIP开源项目源码地址(一)
    iptables下udp穿越实用篇
    function socket about http://net.pku.edu.cn/~yhf/linux_c/function/14.html
    IOKE的SIP协议专栏
    XviD core API overview: Decoding
    Socket about
    sql海量数据优化
    Socket、多线程、消息队列、共享资源并发下的性能研究
    【转】SQL 索引理解
    SQL 索引理解
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4166709.html
Copyright © 2011-2022 走看看