可用一种:
NSDictionary*attrs = @{NSFontAttributeName: [UIFontboldSystemFontOfSize:17]};CGSizesize=[_itemNamelabel.text sizeWithAttributes:attrs];[self.itemNamelabel setFrame:CGRectMake(40,10, size.width,20)];
第一种方法:
@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
//获取一行的宽度
// 这三行 是自己给的参数 如果不需要可以不用。
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;
网友评论