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
  • 相关阅读:
    C++ 沉思录——Chap6:句柄2
    C++ 沉思录——Chap5:代理类
    C++ 沉思录——Chap4:设计类的核查表
    Linux 网卡驱动相关——01
    FCoE的提出
    想成为嵌入式程序员应知道的0x10个基本问题
    C++ 沉思录——Chap6:句柄
    C++ 沉思录——Chap8:一个面向对象程序范例
    数据库调优积累系列(1):索引
    QTP使用问题集锦
  • 原文地址:https://www.cnblogs.com/stevenwuzheng/p/5405197.html
Copyright © 2011-2022 走看看