cell根据文本长度来自动调整cell高度

来源:互联网 发布:mp3剪辑软件 编辑:程序博客网 时间:2024/06/05 17:41

第一种方法:
@interfaceHMTAssistCell :UITableViewCell

@property(nonatomic)UILabel* label;//定义一个文本

@end

@implementationHMTAssistCell

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

{

self= [superinitWithStyle:stylereuseIdentifier:reuseIdentifier];

if(self) {

_label= [[UILabelalloc]initWithFrame:CGRectMake(10,10,300,65)];

_label.backgroundColor= [UIColorgreenColor];

//字体大小

_label.font= [UIFontsystemFontOfSize:15.0];

//不限制行数

_label.numberOfLines=0;

//换行模式

_label.lineBreakMode=NSLineBreakByCharWrapping;

[self.contentViewaddSubview:_label];

}

returnself;

}

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

{

[supersetSelected:selectedanimated:animated];

// Configure the view for the selected state

}

@end

  • (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

//依旧设置重用标识

staticNSString * cellIdentifier=@”cell”;

//这里用我们新建的UITableViewCell的子类进行cell重用声明

HMTAssistCell * cell = (HMTAssistCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

//如果没有,则创建

if(!cell) {

cell = [[HMTAssistCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

}

NSString * textArray = [_textArray objectAtIndex:indexPath.row];

cell.label.text = textArray;

// iOS6中的方法,在iOS7中弃用了

/* CGSize textSize = [textArray sizeWithFont:[UIFont systemFontOfSize:16.0] constrainedToSize:CGSizeMake(280, 100000000) lineBreakMode:NSLineBreakByWordWrapping];*/

//定义一个字典,里面还可以放入其他属性,不仅仅是字体大小

NSDictionary *attribute =@{NSFontAttributeName: [UIFont systemFontOfSize:15.0]};

//iOS7中提供的计算文本尺寸的方法

CGSize textSize1 = [textArray boundingRectWithSize:tableView.bounds.size options:NSStringDrawingUsesLineFragmentOrigin |

NSStringDrawingTruncatesLastVisibleLineattributes:attribute context:nil].size;

NSLog(@”%f”,textSize1.height);

// cell.label.frame.size.height —————–>是错误的,大家可以思考一下为什么是错误的

CGRect rect = cell.label.frame;

rect.size.height = textSize1.height+20;

cell.label.frame = rect;

returncell;

}

//根据文本高度来设置cell高度

  • (CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath{

NSString * textArray = [_textArray objectAtIndex:indexPath.row];

NSDictionary *attribute =@{NSFontAttributeName: [UIFont systemFontOfSize:15.0]};

CGSize textSize1 = [textArray boundingRectWithSize:tableView.bounds.size options:NSStringDrawingUsesLineFragmentOrigin |

NSStringDrawingTruncatesLastVisibleLine attributes:attribute context:nil].size;

returntextSize1.height+35;//让文本离cell有一定的距离显示,上7.5,下7.5

}

import

@interfaceHMTRootViewController :UIViewController

//定义一个可变数组,来存储要显示文本数据

@property(nonatomic)NSMutableArray* textArray;

@end

  • (id)initWithNibName:(NSString )nibNameOrNil bundle:(NSBundle )nibBundleOrNil

{

self= [superinitWithNibName:nibNameOrNil bundle:nibBundleOrNil];

if(self) {

// Custom initialization

_textArray = [[NSMutableArray alloc]init];

[_textArray addObject:@”对于包含对象的变量,Objective-C既支持动态类型化,也支持静态类型化。静态类型化的变量,要在变量类型声明中包括类名称。动态类型化的变量,则要给对象使用类型id。您会发现在某些情况下,会需要使用动态类型化的变量。例如,集(collection)对象,如数组,在它包含对象的类型未知的情况下,可能会使用动态类型化的变量。此类变量提供了极大的灵活性,也让Objective-C程序拥有了更强大的活力。”];

[_textArray addObject:@”请注意第一个声明中的星号(*)。在Objective-C中,执行对象引用的只能是指针。如果您还不能完全理解这个要求,不用担心。并非一定要成为指针专家才能开始Objective-C编程。只需要记住,在静态类型化的对象的声明中,变量的名称前面应放置一个星号。id类型意味着一个指针。”];

[_textArray addObject:@”如果您不熟悉面向对象编程,则将方法想像成一个规范特定对象的函数,可能会有所帮助。通过将一则消息发送到——或发消息给——一个对象,您可调用该对象的一个方法。Objective-C中有两种类型的方法:实例方法和类方法。”];

[_textArray addObject:@”当您想要调用一个方法时,通过给实施该方法的对象发送一则消息来实现。(虽然“发送消息”常可与“调用方法”互换,但实际上,Objective-C在运行时才会执行实际地发送。)消。”];

[_textArray addObject:@”Objective-C还提供用于调用存取方法的点记法语法。存取方法获取并设定对象的状态,因此对于封装很重要,是所有对象的重要功能。对象隐藏或封装其状态,并显示接口,该接口是访问该状态的所有实例都通用的。如果您不熟悉面向对象编程,则将方法想像成一个规范特定对象的函数,可能会有所帮助。通过将一则消息发送到——或发消息给——一个对象,您可调用该对象的一个方法。Objective-C中有两种类型的方法:实例方法和类方法。”];

/[_textArray addObject:@”尽管前几个示例将消息发送到了类的实例,但您也可以将消息发送到类本身。(类是运行时创建的、类型为Class的对象。)向类发送消息时,您指定的方法必须定义为类方法,而非实例方法。类方法是一种功能,类似于C++中的静态类方法。”];/

//NSLog(@”AAAAA”);

}

returnself;

}

第二种方法:
NSString*string = @”文本”;

UILabel*label = [[UILabelalloc]initWithFrame:CGRectMake(10,10,_window_width*0.7,10)];

//lable 的宽度就是你显示的宽度,其他的参数可以看着给

label.numberOfLines=1;//这个可以为0

//label.lineBreakMode = NSLineBreakByCharWrapping; //lable 的换行模式

label.textAlignment=NSTextAlignmentLeft;

label.text= string;

[labelsizeToFit]; // 用系统的方法让lable 自适应文字,得到lable 的frame

//获取一行的宽度

// 这三行 是自己给的参数 如果不需要可以不用。

  1. 列表内容

CGSize size =CGSizeMake((_window_width*0.7), label.frame.size.height);

float numberLine = label.frame.size.width/ (_window_width*0.7);

int num = ceilf(numberLine);
//最后得到字符串所在lable的宽度 就是这样。��������
size.height= num * size.height;

0 0
原创粉丝点击