• sizeWithFont:方法使用明细


     

    个人总结:

    Computing Metrics for a Single Line of Text
    – sizeWithFont: 同下面,换行方式默认取NSLineBreakByWordWrapping

    – sizeWithFont:forWidth:lineBreakMode: 将字符串放入指定宽度,如果不够,就依据换行方式截断字符串,返回其大小。
    – sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:将字符串放入限定宽度内,不足,就缩小字体,直至放下,返回此时的字符串大小和字体大小;缩小到最小还不能放下,就截断字符串,返回其大小和字体大小。设置高度没有什么意义,因为高度值再大也只能显示一行,再小也要显示一行。


    Computing Metrics for Multiple Lines of Text
    – sizeWithFont:constrainedToSize: 同下面,换行方式默认取NSLineBreakByWordWrapping

    – sizeWithFont:constrainedToSize:lineBreakMode:用于多行,指定限制,换行方式,字体大小。限制大小的宽度值和换行方式影响换行,进而影响结果的高度值。限制大小的高度值会影响内容显示的多少,大于实际所需,没影响;小于的话,字符串只能显示一部分,直至只能显示一行.

    注意:指定的限制只是一个评估值,例如在多行里,我设定宽度限制120,高度无限,换行方式NSLineBreakByWordWrapping,那么最终输出的宽度值是118。因为对于某个字体大小,它不会刚好填满你指定的宽度。此外,除了– sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:会改变字体大小的情况外,字体大小指定时,无论换行方式如何,是多行还是单行,最终的高度都是和字体所需的高度成1倍或者n倍关系。

    以下为参考文献:iOS学习:UILabel和sizeWithFont方法

    http://www.cnblogs.com/zouzf/archive/2012/11/21/2780040.html

    1. - (void)viewDidLoad  
    2.  {  
    3.      [super viewDidLoad];  
    4.      // Do any additional setup after loading the view, typically from a nib.  
    5.        
    6.      NSString *text = @"tw ia nwifei xantianwif eixan tianwi feixan";  
    7.        
    8.      //设置字体,包括字体及其大小  
    9.      UIFont *font = [UIFont fontWithName:@"Arial" size:50.0f];  
    10.        
    11.      //label可设置的最大高度和宽度  
    12.      CGSize maxSize = CGSizeMake(320.f, MAXFLOAT);  
    13.        
    14.      //字符串在指定区域内按照指定的字体显示时,需要的高度和宽度(宽度在字符串只有一行时有用)  
    15.      //一般用法:指定区域的宽度而高度用MAXFLOAT,则返回值包含对应的高度  
    16.      //如果指定区域的宽度指定,而字符串要显示的区域的高度超过了指定区域的高度,则高度返回0  
    17.      //核心:多行显示,指定宽度,获取高度  
    18.      CGSize labelSize = [text sizeWithFont:font  
    19.                           constrainedToSize:CGSizeMake(320.f, MAXFLOAT)  
    20.                               lineBreakMode:NSLineBreakByWordWrapping];  
    21.    
    22.      //指定用于显示的区域  
    23.      CGRect rect = CGRectMake(0.0f, 0.0f, labelSize.width, labelSize.height);  
    24.        
    25.      //CGRectZero表示(0,0,0,0),即留待后面再设置  
    26.      UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectZero];  
    27.        
    28.      //label默认只显示一行,把numberofline设为0,即表示不限制行数,根据实际显示  
    29.      [myLabel setNumberOfLines:0];  
    30.        
    31.      myLabel.frame = rect;  
    32.      myLabel.text = text;  
    33.      myLabel.font = font;  
    34.      myLabel.textColor = [UIColor grayColor];  
    35.        
    36.      //把label加入到view里,这样才能显示  
    37.      [self.view addSubview:myLabel];  
    38.        
    39.      //引用计数减一,因为在上一行 addSubview 时,view已经把mylabel的引用计数加一了  
    40.      [myLabel release];  
    41.        
    42.  }  
    43.    
    44.  -(void)test  
    45.  {  
    46.      NSString *text = @"asfawlfaw;lojf";  
    47.      UIFont *font = [UIFont fontWithName:@"Arial" size:20.0f];  
    48.        
    49.      //字符串在指定区域内按照指定的字体显示时,需要的高度和宽度(宽度在字符串只有一行时有用)  
    50.      //一般用法:指定区域的宽度而高度用MAXFLOAT,则返回值包含对应的高度  
    51.      //如果指定区域的宽度指定,而字符串要显示的区域的高度超过了指定区域的高度,则高度返回0  
    52.      //核心:多行显示,指定宽度,获取高度  
    53.      CGSize labelSize = [text sizeWithFont:font  
    54.                          constrainedToSize:CGSizeMake(320.f, MAXFLOAT)  
    55.                              lineBreakMode:NSLineBreakByWordWrapping];  
    56.        
    57.      //字符串用指定字体进行单行显示时,需要的高度和宽度  
    58.      CGSize size1 = [text sizeWithFont:font];  
    59.        
    60.      //字符串用指定字体在指定区域进行单行显示时,需要的高度和宽度;  
    61.      //一般的用法是,指定区域的高度固定而宽度用MAXFLOAT,则返回值包含对应的宽度  
    62.      //如果指定区域的宽度不够,则宽度返回0;高度不够则没影响  
    63.      //核心:单行显示,指定区域的宽度要够大,获取宽度  
    64.      CGSize size2 = [text sizeWithFont:font  
    65.                      constrainedToSize:CGSizeMake(MAXFLOAT, 100.0f)];  
    66.        
    67.        
    68.      //字符串用指定字体指定宽度和指定换行方式显示时,需要的高度和宽度  
    69.      //虽然指定了换行方式,在实际计算时也会换行,但返回结果只会返回第一行的高度和宽度  
    70.      //如果指定宽度小于字符串宽度,则宽度返回0  
    71.      //核心:貌似没有什么用  
    72.      CGSize size3 = [text sizeWithFont:font  
    73.                               forWidth:400.0f  
    74.                          lineBreakMode:NSLineBreakByWordWrapping];  
    75.        
    76.      CGFloat f = 0.0f;  
    77.        
    78.      //虽然指定了换行方式,在实际计算时也会换行,但返回的结果只是第一行的高度很宽度  
    79.      //指定了应该显示的字体,最小的字体,实际的字体,在实际计算中,如果宽度不够,则尽量缩小字符串的字体直至能够一行全部显示,如果缩到最小还不能完全显示字符串,则进行截断,返回截断后的字符串的高度和宽度  
    80.      //字体实际的大小,存放在 actualFontSize里  
    81.      CGSize size4 = [text sizeWithFont:font  
    82.                            minFontSize:10.0f  
    83.                         actualFontSize:&f  
    84.                               forWidth:100.0f  
    85.                          lineBreakMode:NSLineBreakByWordWrapping];  
    86.    
    87.  }  
  • 相关阅读:
    学习笔记-第八周-PLC梯形图编程
    学习笔记-第六周-学习笔记
    学习笔记-第五周-学习笔记
    学习笔记-第四周-心得体会
    学习笔记-第四周-交流电机选优
    学习笔记-第3周-阅读材料&课本预习
    学习笔记-第3周-电机参数优选
    开发日志
    实时软件控制第四周作业
    实时软件控制第三周作业
  • 原文地址:https://www.cnblogs.com/Camier-myNiuer/p/3455501.html
Copyright © 2020-2023  润新知