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
  • 相关阅读:
    ArcGIS Server TileLayer 跨域读取
    dojo.declare 未定义
    注册部署SOE, 提交SOE只能在IE浏览器中
    在maptalks中加载三维模型obj,fbx,glb
    三维模型 obj 转化为 three Json 文件格式
    leaflet map 地图初始化不能铺满div
    查找进行的过程中被停止 解决办法
    逆向的第一个小代码
    编码不规范导致的错误
    android4.4.2 短信广播变更
  • 原文地址:https://www.cnblogs.com/stevenwuzheng/p/5405197.html
Copyright © 2011-2022 走看看