你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS7技巧 >> iOS UITableViewCell自適應高度的例子

iOS UITableViewCell自適應高度的例子

編輯:IOS7技巧
關於ios開發中UITableViewCell小編介紹過不少了,今天來看UITableViewCell自適應高度的一個實現的方法,具體的細節操作如下文介紹。

例如淘寶購買完商品後的評價,評價過的評價列表裡,每個人評價的內容不同,評價內容有多有少,我們一般都是用UITableView來創建界面的,這時候就需要cell自適應高度了。代碼示例:

 代碼如下 復制代碼

EvaluateTableViewCell.h

#import <UIKit/UIKit.h>
 
@interface EvaluateTableViewCell : UITableViewCell
@property (nonatomic,strong) UILabel *phoneLabel;
@property (nonatomic,strong) UILabel *timeLabel;
@property (nonatomic,strong) UILabel *descLabel;
@property (nonatomic,strong) UIView *intervalView;
 
//評價內容並且實現自動換行
-(void)setIntroductionText:(NSString*)text;
 
@end


EvaluateTableViewCell.m

-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        //用戶手機號
        self.phoneLabel = [[UILabel alloc] initWithFrame:CGRectMake(7, 15, 100, 12)];
        self.phoneLabel.font = FONT(12);
        [self addSubview:self.phoneLabel];
        //評價時間
        self.timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(247 * (kScreenWidth / 320), 15, 72, 11)];
        self.timeLabel.font = FONT(11);
        self.timeLabel.textColor = [UIColor grayColor];
        [self addSubview:self.timeLabel];
        //分隔線
        UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(8, self.timeLabel.maxY + 14, kScreenWidth - 16, 1)];
        lineView.backgroundColor = [UIColor blackColor];
        [self addSubview:lineView];
        //評價內容
        self.descLabel = [[UILabel alloc] initWithFrame:CGRectMake(11, lineView.maxY+ 29, kScreenWidth - 22, 13)];
        self.descLabel.font = FONT(12);
        self.descLabel.numberOfLines = 0;
        [self addSubview:self.descLabel];
        //間隔
        self.intervalView = [[UIView alloc] initWithFrame:CGRectMake(0, self.descLabel.maxY + 9, kScreenWidth, 2)];
        self.intervalView.backgroundColor = [UIColor blackColor];
        [self addSubview:self.intervalView];
    }
    return self;
}
//賦值 and 自動換行,計算出cell的高度
-(void)setIntroductionText:(NSString*)text{
    //獲得當前cell高度
    CGRect frame = [self frame];
    //文本賦值
    self.descLabel.text = text;
    //設置label的最大行數
    CGSize size = CGSizeMake(300, 1000);
    CGSize labelSize = [self.descLabel.text sizeWithFont:self.descLabel.font constrainedToSize:size lineBreakMode:NSLineBreakByClipping];
    self.descLabel.frame = CGRectMake(self.descLabel.frame.origin.x, self.descLabel.frame.origin.y, labelSize.width, labelSize.height);
    
    //計算出自適應的高度
    frame.size.height = labelSize.height + 85;
    self.frame = frame;
    self.intervalView.frame = CGRectMake(0, self.descLabel.maxY + 9, kScreenWidth, 4);
}


 

cellzishiyingViewController.m

 代碼如下 復制代碼


#import "cellzishiyingViewController.h"
#import "EvaluateTableViewCell.h"
 
@interface cellzishiyingViewController ()<UITableViewDataSource,UITableViewDelegate>{
    UITableView *evaluateTableView;
    UILabel *evaluateLabel;
    UILabel *goodEvaluateLabel;
}
 
@end
 
@implementation cellzishiyingViewController
 
 
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = RGB(242, 242, 247);
    self.automaticallyAdjustsScrollViewInsets = NO;
    evaluateTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, kHeaderHeight, kScreenWidth, kScreenHeight - kHeaderHeight) style:UITableViewStylePlain];
    evaluateTableView.delegate = self;
    evaluateTableView.dataSource = self;
    evaluateTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    [self.view addSubview:evaluateTableView];
}
#pragma mark - 行
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return 4;
}
#pragma mark - 行高
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    //    return 95;
    EvaluateTableViewCell *cell = [self tableView:evaluateTableView cellForRowAtIndexPath:indexPath];
    return cell.frame.size.height;
}
#pragma mark - 每行內容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *indefier = @"cell";
    EvaluateTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:indefier];
    if (!cell) {
        cell = [[EvaluateTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:indefier];
    }
    NSArray *oneArray = @[@"18374637823",@"18643535325",@"15653543746",@"13924366238"];
    NSArray *twoArray = @[@"2016-04-04",@"2016-04-06",@"2016-05-04",@"2016-09-04"];
    NSArray *threeArray = @[@"由於iOS是遵循MVC模式設計的,很多操作都是通過代理和外界溝通的,但對於數據源控件除了代理還有一個數據源屬性,通過它和外界進行數據交互。",@"UITableView有兩種風格:UITableViewStylePlain和UITableViewStyleGrouped。這兩者操作起來其實並沒有本質區別,只是後者按分組樣式顯示前者按照普通樣式顯示而已",@"由於iOS是遵循MVC模式設計的,很多操作都是通過代理和外界溝通的,但對於數據源控件除了代理還有一個數據源屬性,通過它和外界進行數據交互。 對於UITableView設置完dataSource後需要實現UITableViewDataSource協議,在這個協議中定義了多種 數據操作方法",@"切實開展批評和自我批評,勇於揭露和糾正工作中"];
//    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.phoneLabel.text = oneArray[indexPath.row];
    cell.timeLabel.text =  twoArray[indexPath.row];
    cell.descLabel.text = threeArray[indexPath.row];
    [cell setIntroductionText:cell.descLabel.text];
    return cell;
}

注:

 代碼如下 復制代碼


// 當前屏幕寬度
#define kScreenWidth    [UIScreen mainScreen].bounds.size.width
// 當前屏幕高度
#define kScreenHeight   [UIScreen mainScreen].bounds.size.height

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved