自适应Cell

//

//  ViewController.m

//  04-自适应cell

//

//  Created by ?? on 15/5/22.

//  Copyright (c) 2015年 sczy. All rights reserved.

//

#import "ViewController.h"

#import "JWStatus.h"

#import "JWTableViewCell.h"

#import "JWStatusFrame.h"

@interfaceViewController ()

@property (strong, nonatomic) NSArray  *statusesFrameDatas;

@end

@implementation ViewController

-(NSArray *)statusesFrameDatas

{

if (_statusesFrameDatas == nil) {

NSArray *allDatas = [NSArrayarrayWithContentsOfFile:[[NSBundlemainBundle] pathForResource:@"statuses.plist"ofType:nil]];

NSMutableArray *tempArr = [NSMutableArrayarray];

for (NSDictionary *dict in allDatas) {

JWStatus *status = [JWStatusstatusWithDict:dict];

JWStatusFrame *statusF = [[JWStatusFramealloc]init];

statusF.status = status;

[tempArr addObject:statusF];

}

_statusesFrameDatas = tempArr;

}

return_statusesFrameDatas;

}

- (void)viewDidLoad {

[superviewDidLoad];

self.tableView.rowHeight = 300;

}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return 1;

}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

returnself.statusesFrameDatas.count;

}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

NSLog(@"cellForRowAtIndexPath");

JWTableViewCell *cell = [JWTableViewCellcellWithTableView:tableView];

JWStatusFrame *statusF = self.statusesFrameDatas[indexPath.row];

cell.statusF = statusF;

return cell;

}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

// 1. frame模型保存cell的高度的数据

JWStatusFrame *statusF = self.statusesFrameDatas[indexPath.row];

return statusF.cellHeight;

}

@end

#import "JWStatusFrame.h"

#import "JWStatus.h"

#define kNameLabelFont [UIFont systemFontOfSize:15]

#define kIntroLabelFont [UIFont systemFontOfSize:14]

@implementation JWStatusFrame

-(void)setStatus:(JWStatus *)status

{

_status = status;

// 计算子控件的frame和cell的高度

CGFloat margin = 10;

CGFloat iconViewX = margin;

CGFloat iconViewY = margin;

CGFloat iconViewW = 35;

CGFloat iconViewH = iconViewW;

_iconViewF = CGRectMake(iconViewX, iconViewY, iconViewW, iconViewH);

// 计算宽高()sizeWithFont: iOS6用这个  iOS之后用下面这个

// 指定我要以这个大小的字体显示

NSDictionary *attributeDict = @{NSFontAttributeName : kNameLabelFont};

// 最大范围

CGSize maxSize = CGSizeMake(MAXFLOAT, MAXFLOAT);

// 就是Name的size

CGSize size = [status.nameboundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOriginattributes:attributeDict context:nil].size;

CGFloat nameLabelX = margin + CGRectGetMaxX(_iconViewF);

CGFloat nameLabelW = size.width;

CGFloat nameLabelH = size.height;

CGFloat nameLabelY = _iconViewF.origin.y + (_iconViewF.size.height - nameLabelH) * 0.5;

_nameLabelF = CGRectMake(nameLabelX, nameLabelY, nameLabelW, nameLabelH);

// vip

if (status.vip) {

CGFloat vipViewX = margin + CGRectGetMaxX(_nameLabelF);

CGFloat vipViewW = 14;

CGFloat vipViewH = vipViewW;

CGFloat vipViewY = _nameLabelF.origin.y;

_vipViewF = CGRectMake(vipViewX, vipViewY, vipViewW, vipViewH);

}

// intro

CGSize maxSize2 = CGSizeMake(375 - margin * 2, MAXFLOAT);

NSDictionary *attributeDict2 = @{NSFontAttributeName : kIntroLabelFont};

CGSize introLabelSize = [status.textboundingRectWithSize:maxSize2 options:NSStringDrawingUsesLineFragmentOriginattributes:attributeDict2 context:nil].size;

CGFloat introLabelX = margin;

CGFloat introLabelW = introLabelSize.width;

CGFloat introLabelH = introLabelSize.height;

CGFloat introLabelY = CGRectGetMaxY(_iconViewF) + margin;

_introLabelF = CGRectMake(introLabelX, introLabelY, introLabelW, introLabelH);

// picture

if (status.picture) {

CGFloat pictureViewX = margin;

CGFloat pictureViewW = 150;

CGFloat pictureViewH = pictureViewW;

CGFloat pictureViewY = CGRectGetMaxY(_introLabelF) + margin;

_pictureViewF = CGRectMake(pictureViewX, pictureViewY, pictureViewW, pictureViewH);

_cellHeight = CGRectGetMaxY(_pictureViewF) + margin;

}

else

{

_cellHeight = CGRectGetMaxY(_introLabelF) + margin;

}

}

@end

#import "JWTableViewCell.h"

#import "JWStatus.h"

#import "JWStatusFrame.h"

#define kNameLabelFont [UIFont systemFontOfSize:15]

#define kIntroLabelFont [UIFont systemFontOfSize:14]

@interfaceJWTableViewCell()

@property (strong, nonatomic) UIImageView *iconView;

@property (strong, nonatomic) UILabel *nameLabel;

@property (strong, nonatomic) UIImageView *vipView;

@property (strong, nonatomic) UILabel *introLabel;

@property (strong, nonatomic) UIImageView *pictureView;

@end

@implementation JWTableViewCell

+(instancetype)cellWithTableView:(UITableView *)tableView

{

staticNSString *str = @"cell";

JWTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:str];

if (!cell) {

cell = [[JWTableViewCellalloc]initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:str];

}

return cell;

}

-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

{

if (self = [superinitWithStyle:style reuseIdentifier:reuseIdentifier]) {

// 添加自己可能显示的所有子控件

UIImageView *iconView = [[UIImageViewalloc]init];

[self.contentViewaddSubview:iconView];

self.iconView = iconView;

UILabel *nameLabel = [[UILabelalloc]init];

nameLabel.font = kNameLabelFont;

nameLabel.numberOfLines = 0;

[self.contentViewaddSubview:nameLabel];

self.nameLabel = nameLabel;

UIImageView *vipView = [[UIImageViewalloc]init];

vipView.image = [UIImageimageNamed:@"vip"];

[self.contentViewaddSubview:vipView];

self.vipView = vipView;

UILabel *introLabel = [[UILabelalloc]init];

introLabel.font = kIntroLabelFont;

introLabel.numberOfLines = 0;

[self.contentViewaddSubview:introLabel];

self.introLabel = introLabel;

UIImageView *pictureView = [[UIImageViewalloc]init];

[self.contentViewaddSubview:pictureView];

self.pictureView = pictureView;

}

returnself;

}

-(void)setStatusF:(JWStatusFrame *)statusF

{

_statusF = statusF;

// 给子控件赋值

[selfsetSubViewsData:statusF];

// 设置子控件的frame

[selfsetSubViewsFrame:statusF];

}

-(void)setSubViewsData:(JWStatusFrame *)statusF

{

JWStatus *status = statusF.status;

self.iconView.image = [UIImageimageNamed:status.icon];

self.nameLabel.text = status.name;

if (statusF.status.vip) {

self.nameLabel.textColor = [UIColorredColor];

}

else

{

self.nameLabel.textColor = [UIColorblackColor];

}

self.introLabel.text = status.text;

self.pictureView.image = [UIImageimageNamed:status.picture];

}

-(void)setSubViewsFrame:(JWStatusFrame *)statusF

{

// 计算子控件的frame

self.iconView.frame = statusF.iconViewF;

self.nameLabel.frame = statusF.nameLabelF;

self.vipView.frame = statusF.vipViewF;

self.introLabel.frame = statusF.introLabelF;

self.pictureView.frame = statusF.pictureViewF;

}

@end

时间: 2024-10-29 19:17:25

自适应Cell的相关文章

iOS 8:【转】iOS 8 自适应 Cell

源地址:http://vit0.com/blog/2014/11/13/ios-8-zi-shi-ying-cell/ 在使用 table view 的时侯经常会遇到这样的需求:table view 的 cell 中的内容是动态的,导致在开发的时候不知道一个 cell 的高度具体是多少,所以需要提供一个计算 cell 高度的算法,在每次加载到这个 cell 的时候计算出 cell 真正的高度. 在 iOS 8 之前 没有使用 Autolayout 的情况下,需要实现 table view del

iOS 8 自适应 Cell

在使用 table view 的时侯经常会遇到这样的需求:table view 的 cell 中的内容是动态的,导致在开发的时候不知道一个 cell 的高度具体是多少,所以需要提供一个计算 cell 高度的算法,在每次加载到这个 cell 的时候计算出 cell 真正的高度. 在 iOS 8 之前 没有使用 Autolayout 的情况下,需要实现 table view delegate 的 tableView(tableView: UITableView, heightForRowAtInde

ISO 8 自适应cell

原文网址: http://www.cocoachina.com/ios/20141218/10687.html 在使用 table view 的时侯经常会遇到这样的需求:table view 的 cell 中的内容是动态的,导致在开发的时候不知道一个 cell 的高度具体是多少,所以需要提供一个计算 cell 高度的算法,在每次加载到这个 cell 的时候计算出 cell 真正的高度. 在 iOS 8 之前 没有使用 Autolayout 的情况下,需要实现 table view delegat

tableview 使用visual format language自适应cell宽高,和横竖屏

再也不用担心,如何做适配了. 使用苹果官方提供的适配方案当然是最正宗的,比第三房框架可控. 可以适配各种屏幕尺寸,以及横竖屏,欢迎有独特简介的极客们,提出宝贵意见 开发过程中,时常会遇到cell自适应高度与横屏下的宽度,传统的做法要么是手动计算frame,要么就是使用xib. 第一种方式,工作量是巨大的(相信很多人深有体会). 第二种方式,对于协同开发和有些不用xib公司来说,有些可望不可及. 第三种方式,手写constraints.手写过的猿猿们一定体会到会有多少行代码. 其实还有一种看起来不

根据展示文字自适应 cell 高度,实现点击cell的伸缩扩展

1.要根据展示的文字计算cell的高度, 再此给NSString写的延展的方法, 以此获取展示文字的高度 2.在自定义的cell中 声明属性和定义方法 注:在cell上初始化子控件,最好用代码写, 不知为何用storyBoard初始化的不能重置其frame 3.在ViewController 中

可变cell,自适应cell,理解iOS 8中的Self Sizing Cells和Dynamic Type

在iOS 8中,苹果引入了UITableView的一项新功能--Self Sizing Cells,对于不少开发者来说这是新SDK中一项非常有用的新功能.在iOS 8之前,如果想在表视图中展示可变高度的动态内容时,你需要手动计算行高,而Self Sizing Cells为展示动态内容提供了一个解决方案.以下是你使用Self Sizing Cells时需要注意的事项: 1.为原型单元格定义Auto Layout约束 2.指定表视图的estimatedRowHeight 3.将表视图的rowHeig

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

转自:http://www.cnblogs.com/qianLL/p/5393331.html 在github中有许多大牛封装好的第三发类库,其中有个自适应cell高度的类库 下载地址:https://github.com/gsdios/SDAutoLayout model类 commentsModel #import "JSONModel.h" #import "getCommentData.h" @interface commentsModel : JSONMo

iOS 8:【转】iOS UITextView 输入内容实时更新 cell 的高度

源地址:http://vit0.com/blog/2014/12/25/ios-textview-in-cell/ 这篇文章介绍了在一个动态数据的 table view 中,cell 根据 text view 内容的输入实时改变 cell 和 table view 的高度.自动计算 cell 高度的功能使用 iOS 8 才支持的自适应 cell,如果你还不知道 iOS 8 自适应 cell,可以参看这篇文章:iOS 8 自适应 Cell 先上图,我们最终要实现的效果是这样的: 图 1:实时更新

iOS UITextView 输入内容实时更新cell的高度

先上图,我们最终要实现的效果是这样的:可参考(http://www.cocoachina.com/ios/20141226/10778.html) 图 1:实时更新 cell 高度 实现上面效果的基本原理是: 在 cell 中设置好 text view 的 autolayout,让 cell 可以根据内容自适应大小 text view 中输入内容,根据内容更新 textView 的高度 调用 tableView 的 beginUpdates 和 endUpdates,重新计算 cell 的高度