iOS 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

时间: 2024-11-08 20:56:15

iOS UITableViewCell自适应高度的例子的相关文章

详解iOS tableViewCell自适应高度 第三发类库_IOS

在github中有许多大牛封装好的第三发类库,其中有个自适应cell高度的类库 下载地址:https://github.com/gsdios/SDAutoLayout model类 commentsModel #import "JSONModel.h" #import "getCommentData.h" @interface commentsModel : JSONModel @property(nonatomic,copy)NSArray<getComme

ios开发之UItableViewCell自适应高度

有时我们使用tableviewcell展示数据时,接受到的数据会超出我们初始化时设定的cell高度,这时我们就需要自适应cell的高度了.下面是返回cell高度的代码 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath   {   luckNumberLabel = [[UILabel alloc] initWithFrame:CGRectMake(80, 40

设计iOS中随系统键盘弹收和内容文字长度自适应高度的文本框

设计iOS中随系统键盘弹收和内容文字长度自适应高度的文本框     文本输入框是多数与社交相关的app中不可或缺的一个控件,这些文本输入框应该具备如下的功能: 1.在键盘为弹起时,输入框悬浮在界面底部. 2.当键盘弹起时,输入框位置上移至键盘上方,并且动画应与键盘同步. 3.当输入的文字超出一行时,输入框应想用的进行高度扩展. 4.当输入框的高度达到某一极限值时,输入框高度不应继续扩展,文字区域应该支持滑动.     使用autolayout布局技术加上对键盘的相关监听,可以十分方便的实现上述效

iOS Webview自适应实际内容高度的4种方法详解_IOS

//第一种方法 - (void)webViewDidFinishLoad:(UIWebView *)webView { CGFloat webViewHeight=[webView.scrollView contentSize].height; CGRect newFrame = webView.frame; newFrame.size.height = webViewHeight; webView.frame = newFrame; _webTablewView.contentSize = C

javascript控制iframe自适应高度例子

iframe有一个烦人的问题,就是在没有设置高度的情况下,被嵌套区会显示一大片空白,有时候设置了高度也不行,后来用JavaScript轻松解决了iframe自适应高度的问题,下面把经验和具体方法分享出来. 为了演示方便,这里需要2个页面,一个是被iframe的页,一个是母页面,先来看母页面,也就是有iframe代码的页面:  代码如下 复制代码 <html> <head> <title>iframe自适应加载的网页高度</title> </head&g

js 跨域IFRAME自适应高度例子

需求: A页面使用iframe标签跨域包含B页面 问题: A/B页面不同域,A页面无法获取并自适应B页面高度 方案: 增加C页面,A/C页面同域,A包含B,B包含C,B通知C高度,C调整A页面iframe高度~   跨域IFRAME自适应高度   A页面: <iframe id="iframe_a" src="B页面url" width="100%" style="border:0"></iframe>

ios-IOS SWIFT UIControllerView 里的tableviewcell自适应高度

问题描述 IOS SWIFT UIControllerView 里的tableviewcell自适应高度 想实现让cell 根据label里的数据自动调整高度让label多行显示数据,根据网上给的自适应方法没有实现,还希望伙伴们给点指导,下面附上代码和截图 class ViewController: UIViewController { @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.v

iOS获取Label高度的几种方法与对比_IOS

介绍 在设置 UILabel 的 Frame 高度时,不能简单的设置为字体的 font size.否则会将字体的一部分裁剪掉.因为 UILabel 在不同的字体设置下,对 Frame 的高度要求也不一样,大多数情况下都比Font的高度设置要高一些. 一.sizeThatFits 使用 view 的 sizeThatFits 方法. // return 'best' size to fit given size. does not actually resize view. Default is

脚本控制三行三列自适应高度DIV布局

脚本|控制|自适应 这个例子是用JS脚本控制并列DIV的高度,通常在DIV布局中,自适应高度一直是比较头疼的问题,一般大都采用背景图.外套DIV.右栏覆盖左栏......来解决.现在加了脚本后,简单多了,假如有三个水平并列的DIV,fbox.mbox.sbox,只要在<body>标签中写入:,测试条件:ie5.x.ie6.0.FF1.03. NS7.2.opera8.01.最终效果. JS代码:版权归原作者,仅供学习研究. /* --------------------------------