iOS 自定义cell的高度

在iOS开发过程中,最重要的几个UIView分别为UITableView、UIScrollView、UICollection.今天由小白哥带大家认识一下UItableVIew

首先,建立一个Model类:

#import <Foundation/Foundation.h>

@interface News : NSObject

@property (nonatomic,retain)
NSString *title;

@property (nonatomic,retain)
NSString *summary;

@end

News.m

#import "News.h"

@implementation News

- (void)dealloc

{

self.summary =
nil;

self.title =
nil;

[super
dealloc];

}

//类中不存在与字典中key同名的属性时,会执行这个方法,重写该方法防治崩溃

- (void)setValue:(id)value forUndefinedKey:(NSString *)key

{

}

@end

打开cell.h

#import <UIKit/UIKit.h>

@class News;

@interface NewsListCell :
UITableViewCell

@property (nonatomic,retain)
News *news;

//

+ (CGFloat)cellHigth:(News *)news;

@end

打开cell.m

#import "NewsListCell.h"

#import "News.h"

@interface
NewsListCell ()

{

UILabel *_titleLabel;

UILabel *_summarylabel;

}

@end

@implementation NewsListCell

- (void)dealloc

{   
self.news =
nil;

[_summarylabel
release];

[_titleLabel
release];

[super
dealloc];

}

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

{

self = [super
initWithStyle:style
reuseIdentifier:reuseIdentifier];

if (self) {

// Initialization code

[self
setuoSubviews];

}

return
self;

}

- (void)setuoSubviews

{

//标题

_titleLabel = [[UILabel
alloc] initWithFrame:CGRectMake(20,
10,
280, 40)];

_titleLabel.backgroundColor = [UIColor
yellowColor];

_titleLabel.font = [UIFont
systemFontOfSize:20.0];

[self.contentView
addSubview:_titleLabel];

//内容

_summarylabel = [[UILabel
alloc] initWithFrame:CGRectMake(20,
60,
280, 30)];

_summarylabel.backgroundColor = [UIColor
cyanColor];

_summarylabel.font = [UIFont
systemFontOfSize:17.0];

_summarylabel.numberOfLines =
0;

[self.contentView
addSubview:_summarylabel];

}

- (void)setNews:(News *)news

{

if (_news != news) {

[_news
release];

_news = [news retain];

}

_titleLabel.text = news.title;

_summarylabel.text = news.summary;

//修改summmartlabel的高度

CGRect summaryrect =
_summarylabel.frame;

summaryrect.size.height = [[self
class] summaryheight:news.summary];

_summarylabel.frame = summaryrect;

}

//设置高度,根据传入数据,计算当前行高

+ (CGFloat)cellHigth:(News *)news

{

//计算可变

CGFloat summaryHight = [self
summaryheight:news.summary];

//返回不可变+keb

return 10 +
40 + 10 + summaryHight +
20;

}

//计算新闻内容
的高度(横向或竖向固定)

+ (CGFloat)summaryheight:(NSString *)summary

{

//文本渲染时需要的矩行大小,按需求:宽度固定位280,高度设置为10000(即高度根据文本计算得到的)
宽度与显示文本的label的宽度有关(一样大)

CGSize contextSize =
CGSizeMake(280,
10000);

//计算时设置的字体大小,必须与显示文本的label的字体大小保持一致

NSDictionary *attributes  =
@{NSFontAttributeName:[UIFont
systemFontOfSize:17.0]};//系统类提供的字符串.设置字体
(跟label有关 17)

CGRect summaryRect = [summary
boundingRectWithSize:contextSize options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributes context:nil];

return summaryRect.size.height;//只需要其中一个

}

- (void)awakeFromNib

{

// Initialization code

}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated

{

[super
setSelected:selected
animated:animated];

// Configure the view for the selected state

}

@end

打开UITableViewController.m为:

//

//  NewsListTableViewController.m

//  Lesson11Cellhight

//

//  Created by Dubai on 14-9-30.

//  Copyright (c) 2014年 Dubai All rights reserved.

//

#import "NewsListTableViewController.h"

#import "NewsListCell.h"

#import "News.h"

#define kNewsCell @"NewsListCell"

@interface
NewsListTableViewController ()

{

NSMutableArray *_newsArray;

}

@end

@implementation NewsListTableViewController

- (void)dealloc

{

[_newsArray
release];

[super
dealloc];

}

- (id)initWithStyle:(UITableViewStyle)style

{

self = [super
initWithStyle:style];

if (self) {

// Custom initialization

}

return
self;

}

- (void)viewDidLoad

{

[super
viewDidLoad];

NSString *filepath = [[NSBundle
mainBundle] pathForResource:@"NewsData"
ofType:@"plist"];

NSDictionary *sourceDic = [NSDictionary
dictionaryWithContentsOfFile:filepath];

_newsArray = [[NSMutableArray
alloc] initWithCapacity:50];

NSArray *sourceArray = sourceDic[@"news"];

// NSLog(@"source array = %@",sourceArray);

//NSMutableArray *newsArray = [[NSMutableArray alloc] initWithCapacity:50];

for (NSDictionary *newsDic
in sourceArray) {

News *news = [[News
alloc] init];

[news setValuesForKeysWithDictionary:newsDic];

[_newsArray
addObject:news];

[news
release];

}

NSLog(@"_newsArray = %@",_newsArray);

//注册

[self.tableView
registerClass:[NewsListCell
class] forCellReuseIdentifier:kNewsCell];

}

- (void)didReceiveMemoryWarning

{

[super
didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

if ([self
isViewLoaded]  && self.view.window ==nil ) {

self.view =
nil;

}

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

// Return the number of sections.

//return [_newsArray count];

return 1;

}

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

{

// Return the number of rows in the section.

return [_newsArray
count];

}

//设置行高限制性,设置cell后执行,即执行设置行高时 cell不存在对象;

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

{

//在cell类中
计算,定义类的方法.传入数据对象,返回计算后的高度

News *news = _newsArray[indexPath.row];

return [NewsListCell
cellHigth:news];

//return 110;

}

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

{

//News *bnews = [[News alloc] init];

NewsListCell *cell = [tableView
dequeueReusableCellWithIdentifier:kNewsCell
forIndexPath:indexPath];

News *anews = _newsArray[indexPath.row];

//    cell.new = news.title;

//    cell.new = news.summary;

//cell.news =bnews;

cell.news = anews;

return cell;

}

@end

我写的这个 所有的数据卸载一个plist文件里是一个字典类型!大家可以创建一个试一下!

时间: 2024-10-08 18:29:02

iOS 自定义cell的高度的相关文章

iOS ?自定义cell的步骤

?自定义cell的步骤(每个cell的?高度不?一样,每个cell?里?面显?示的 内容也不?一样) 新建?一个继承?自UITableViewCell的?子类 2. 在initWithStyle:方法中进行?控件的初始化 1> 将有可能显?示的所有?子控件都添加到contentView中 2> 顺便设置?子控件的?一些属性(?一次性的设置:字体.?文字颜?色. 背景 3. 提供2个模型 1> ?一个是数据模型(?文字数据 + 图?片数据) 2> ?一个是frame模型(数据模型 +

iOS自定义进度条高度(UIProgressView进度条高度改变的实现)

今天自定义了iOS中的进度条,发现系统的进度条高度无法改变, 现在自己封装了一种进度条(实际是是UIView而不是UIProgressView),可以改变进度条的高度,非常好用,分享给大家,直接上代码: //  CTWBProgress.h //  Created by WBapple on 16/7/31. //  Copyright © 2016年 王彬. All rights reserved. // #import <UIKit/UIKit.h> @interface CTWBProg

自定义cell的高度

// //  RootTableViewController.m //  Share // //  Created by lanouhn on 15/1/20. //  Copyright (c) 2015年 niutiantian. All rights reserved. // #import "RootTableViewController.h" #import "CustomTableViewCell.h" #import "DetailViewC

自定义cell 自适应高度

#pragma mark - 动态计算cell高度 //计算 返回 文本高度 + (CGFloat)calsLabelHeightWithContact:(Contacts *)contact { //size:   文字最大范围 //options:计算高度 参数 //  NSStringDrawingUsesLineFragmentOrigin:指定 原点 绘制字符串片段起源和基线. //attributes:文字某个属性 通常是大小 //ios7 获取文本高 方法 CGRect rect

IOS XIB Cell自适应高度实现

1.代码实现Cell高度自适应的方法 通过代码来实现,需要计算每个控件的高度,之后获取一个cell的 总高度,比较常见的是通过lable的文本计算需要的高度. CGSize labelsize = [@"asdassdas" sizeWithFont:font constrainedToSize:CGSizeMake(320,2000) lineBreakMode:NSLineBreakModeWordWrap]; 这样就可以计算展示需要的高度,cell里面展示的时候可以在代理的方法内

2015 IOS 自定义cell成绩单——在蓝懿教育 学习笔记

1.sb中添加一个tv,箭头,Cell,创建tvc并关联 2.建立Student对象,在.h中建立字符串name,语数英: 3.在tvc创建数组,学生的对象, 初始化, 获取字符串和内容(txt 的文件) 分割字符串 遍历拿到每一行,拿到每一行再分割 每一行都要创建一个student, 每个学生的姓名 语数英分数 把创建好的学生对象添加到数组 4.行数,内容, 取出每行学生对象, 然后cell,textlabel.text  = .. 此时名称显示出来 5.创建tableviewCell 关联s

自定义 cell 自适应高度

#import "CommodityCell.h" #import "UIImageView+WebCache.h" @implementation CommodityCell - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:re

iOS开发总结-UITableView 自定义cell和动态计算cell的高度

UITableView cell自定义头文件: shopCell.h #import <UIKit/UIKit.h> @interface shopCell : UITableViewCell @property (strong, nonatomic)  UIImageView *image;@property (strong, nonatomic)  UILabel *name;@property (strong, nonatomic)  UILabel *itemshop;@propert

IOS 通过 代码 自定义cell(Cell的高度不一致)(优化性能)

创建cell的步骤 1.新建一个继承自UITabelViewCell的类 2.重写 initWithStyle:ReuseIdentifier: 方法 添加所有需要显示的子控件(不需要设置子控件的数据和frame,子控件要添加到contentView中) 进行子控件一次性的属性设置(有些属性中需要设置一次,比如字体\固定的图片) 3.提供2个模型 数据模型:存放文字数据\图片数据 frame模型:存放数据模型\所有子控件的frame\cell的高度(可优化性能) 4.cell拥有一个frame模