https://github.com/YouXianMing

精简计算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

几个需要注意的地方:

 

posted @ 2014-12-17 23:14  YouXianMing  阅读(370)  评论(0编辑  收藏  举报