zoukankan      html  css  js  c++  java
  • IOS7中动态计算UILable的高度

    .h文件

    #import <UIKit/UIKit.h>
     
    @interface UILabel (ContentSize)
     
    - (CGSize)contentSize;
     
    @end

    .m文件

    #import "UILabel+ContentSize.h"
     
    @implementation UILabel (ContentSize)
    
    - (CGSize)contentSize {
       NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        paragraphStyle.lineBreakMode = self.lineBreakMode;
        paragraphStyle.alignment = self.textAlignment;
        
        NSDictionary * attributes = @{NSFontAttributeName : self.font,
                                      NSParagraphStyleAttributeName : paragraphStyle};
        
        CGSize contentSize = [self.text boundingRectWithSize:CGSizeMake(self.frame.size.width, MAXFLOAT)
                                                  options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                                               attributes:attributes
                                                  context:nil].size;
        return contentSize;
    }
    @end

    这个类是在别人的基础上改动的

    以下是详细的实现:

     UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 280, 20)];
        label.font = [UIFont boldSystemFontOfSize:15.0f];  //UILabel的字体大小
        label.numberOfLines = 0;  //必须定义这个属性,否则UILabel不会换行
        label.textColor = [UIColor whiteColor];
        label.textAlignment = NSTextAlignmentLeft;  //文本对齐方式
        [label setBackgroundColor:[UIColor redColor]];
        label.lineBreakMode = NSLineBreakByWordWrapping;
        
        NSLog(@"%d",label.lineBreakMode);
        //宽度不变,依据字的多少计算label的高度
        NSString *str = @"伴随着张震岳的这首老歌,仿佛我又回到了过去,回到了大学即将分别的日子,带着不舍与迷惘和他们说再见。又是一年毕业季,看着朋友圈各种晒毕业照,毕业旅行照,学士帽漫天的飞舞。各种送别活动在鲜花和掌声中慢慢退去色彩,心里不时充满着各种思念。离开校园整整一年了,每当和别人谈起母校各种自豪,大学生活各种多彩。人生经历各种丰富,事实上内心还是留有种种遗憾;四年的蹉跎时光,有人收获了知识。有人收获了人生阅历,还有人收获了爱情,而我收获的仅仅有那清纯的友谊,兄弟情。

    分别整整一年了,还记得那时我们都是多么的不舍,同学情,兄弟情,混合着酒精流到心里,一米八几的大男孩哭的稀里哗啦,拥抱着说再见;之后的我们离开了熟悉的校园,奔赴在各个工作岗位。去体现自己的价值,为生活而忙碌着;一转身。有些人真的就再也不见。

    毕业一周年,你们还好吗?工作还顺利吗?学习还顺心吗?一切都回不了头,仅仅能在心里默默地想着你们,希望你们安好。

    。。"; // CGSize size = [str sizeWithFont:label.font constrainedToSize:CGSizeMake(label.frame.size.width, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping]; // //依据计算结果又一次设置UILabel的尺寸 // [label setFrame:CGRectMake(20, 10, 280, size.height)]; // label.text = str; label.text = str; [label setFrame: CGRectMake(20, 20, 280, [label contentSize].height)]; [self.view addSubview:label];

    上面的凝视部分是老的方法。

    这里要注意几点:

    1、我在调用contentSize前设置下label.lineBreakMode属性。
    2、文字究竟换不换行的关键是设置CGSizeMake(w,h),差别主要在w,h的值改动。


    Demo地址

    
    

  • 相关阅读:
    FOR XML PATH应用之用一条SQL语句横向合并结果行
    配置SharePoint 2007 过程中引发Microsoft.SharePoint.Upgrade.SPUpgradeException 异常(未能创建配置数据库)的一个解决方法
    Android仿360手机卫士九宫图
    第一个 Android 程序
    图解SharePoint 2010 安装过程
    在Windows Server 2008 R2(64位)上安装SharePoint 2007出现的一个错误的解决方法
    用Hint取代Messagebox来提示错误信息
    近期阅读计划
    测试下外链图片
    淘宝DBA的技术要求
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6951645.html
Copyright © 2011-2022 走看看