根据文字计算lable宽度

作者: 阿狸先森丶12138 | 来源:发表于2017-03-16 16:03 被阅读81次

    可用一种:

    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;

    相关文章

      网友评论

      本文标题:根据文字计算lable宽度

      本文链接:https://www.haomeiwen.com/subject/yfsjnttx.html