zoukankan      html  css  js  c++  java
  • [BS-01] 根据字符串对象的参数自动计算用来显示该字符串的UI控件的宽和高

    根据字符串对象的参数自动计算用来显示该字符串的UI控件的宽和高

     

    1.  影响昵称Label的高和宽的因素: 字体和字号大小、文字多少、高度取决于是否固定了宽度(是否限制了最大的宽度和高度)

    2. 使用字符串对象的boundingRectWithSize方法自动计算,该字符串对象显示时需要的的CGRect值

    [字符串对象 boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil]

    3. 还需确保这里计算的时候使用的字体大小和创建Label时设置的字体大小一致, 故使用一个宏来统一设置。

    注意:iOS方法中关于attributes参数的写法都在UIKit/NSAttributedString.h头文件下,该头文件还引用了

    Foundation/NSAttributedString.h(Foundation框架也有该头文件)

     

    4. 举例:  根据昵称的文字计算昵称label的宽和高

    //定义name字体宏

    #define nameFont [UIFont systemFontOfSize:12]

     

    //1. 创建显示文字块的Label

            UILabel *lblName = [[UILabel alloc]init];

            lblName.font = nameFont;  //此处设置的字体需与用于自动计算的字体保持一致

     

    //2. 根据文字块计算显示它的LabelCGSize    

        // 方法中attributes的参数: 字体字典

        NSDictionary *fontDict = @{NSFontAttributeName : nameFont};     //在设置Label字体时也必须用12号系统字,所以定义宏#define nameFont [UIFont systemFontOfSize:12]

      //根据文字参数计算显示Label的宽高

        CGRect nameRect = [nameStr boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:fontDict context:nil]; //不限定最大宽高

        //设置Frame

        CGFloat nameW = nameRect.size.width;

        CGFloat nameH = nameRect.size.height;

        CGFloat nameX = 10;

        CGFloat nameY = 10;

       lblName.frame = CGRectMake(nameX, nameY, nameW, nameH);

     

    //3. 添加label

    [self.view addSubview:lblName];

     

    iOS开发者交流群:180080550
  • 相关阅读:
    磁盘分区异常占用满了
    平滑升级nginx
    supervisor进程异常挂掉
    datetime值毫秒四舍五入
    docker+tomcat 启动时非常慢原因之JRE /dev/random阻塞
    Tomcat最大连接数问题
    Docker:设置代理proxy
    easy_install和pip安装python库修改默认的源
    zabbix监控mysql之Warning: Using a password on the command line interface can be insecure.
    Mysql忘记密码解决方法
  • 原文地址:https://www.cnblogs.com/stevenwuzheng/p/5405197.html
Copyright © 2011-2022 走看看