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.     NSString *text = @"tw ia nwifei xantianwif eixan tianwi feixan";  

  6. //設置字體,包括字體及其大小

  7.     UIFont *font = [UIFont fontWithName:@"Arial" size:50.0f];  

  8. //label可設置的最大高度和寬度

  9.     CGSize maxSize = CGSizeMake(320.f, MAXFLOAT);  

  10. //字符串在指定區域內按照指定的字體顯示時,需要的高度和寬度(寬度在字符串只有一行時有用)

  11. //一般用法:指定區域的寬度而高度用MAXFLOAT,則返回值包含對應的高度

  12. //如果指定區域的寬度指定,而字符串要顯示的區域的高度超過了指定區域的高度,則高度返回0

  13. //核心:多行顯示,指定寬度,獲取高度

  14.     CGSize labelSize = [text sizeWithFont:font  

  15.                          constrainedToSize:CGSizeMake(320.f, MAXFLOAT)  

  16.                              lineBreakMode:NSLineBreakByWordWrapping];  

  17. //指定用於顯示的區域

  18.     CGRect rect = CGRectMake(0.0f, 0.0f, labelSize.width, labelSize.height);  

  19. //CGRectZero表示(0,0,0,0),即留待後面再設置

  20.     UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectZero];  

  21. //label默認只顯示一行,把numberofline設爲0,即表示不限制行數,根據實際顯示

  22.     [myLabel setNumberOfLines:0];  

  23.     myLabel.frame = rect;  

  24.     myLabel.text = text;  

  25.     myLabel.font = font;  

  26.     myLabel.textColor = [UIColor grayColor];  

  27. //把label加入到view裏,這樣才能顯示

  28.     [self.view addSubview:myLabel];  

  29. //引用計數減一,因爲在上一行 addSubview 時,view已經把mylabel的引用計數加一了

  30.     [myLabel release];  

  31. }  

  32. -(void)test  

  33. {  

  34.     NSString *text = @"asfawlfaw;lojf";  

  35.     UIFont *font = [UIFont fontWithName:@"Arial" size:20.0f];  

  36. //字符串在指定區域內按照指定的字體顯示時,需要的高度和寬度(寬度在字符串只有一行時有用)

  37. //一般用法:指定區域的寬度而高度用MAXFLOAT,則返回值包含對應的高度

  38. //如果指定區域的寬度指定,而字符串要顯示的區域的高度超過了指定區域的高度,則高度返回0

  39. //核心:多行顯示,指定寬度,獲取高度

  40.     CGSize labelSize = [text sizeWithFont:font  

  41.                         constrainedToSize:CGSizeMake(320.f, MAXFLOAT)  

  42.                             lineBreakMode:NSLineBreakByWordWrapping];  

  43. //字符串用指定字體進行單行顯示時,需要的高度和寬度

  44.     CGSize size1 = [text sizeWithFont:font];  

  45. //字符串用指定字體在指定區域進行單行顯示時,需要的高度和寬度;

  46. //一般的用法是,指定區域的高度固定而寬度用MAXFLOAT,則返回值包含對應的寬度

  47. //如果指定區域的寬度不夠,則寬度返回0;高度不夠則沒影響

  48. //核心:單行顯示,指定區域的寬度要夠大,獲取寬度

  49.     CGSize size2 = [text sizeWithFont:font  

  50.                     constrainedToSize:CGSizeMake(MAXFLOAT, 100.0f)];  

  51. //字符串用指定字體指定寬度和指定換行方式顯示時,需要的高度和寬度

  52. //雖然指定了換行方式,在實際計算時也會換行,但返回結果只會返回第一行的高度和寬度

  53. //如果指定寬度小於字符串寬度,則寬度返回0

  54. //核心:貌似沒有什麼用

  55.     CGSize size3 = [text sizeWithFont:font  

  56.                              forWidth:400.0f  

  57.                         lineBreakMode:NSLineBreakByWordWrapping];  

  58.     CGFloat f = 0.0f;  

  59. //雖然指定了換行方式,在實際計算時也會換行,但返回的結果只是第一行的高度很寬度

  60. //指定了應該顯示的字體,最小的字體,實際的字體,在實際計算中,如果寬度不夠,則儘量縮小字符串的字體直至能夠一行全部顯示,如果縮到最小還不能完全顯示字符串,則進行截斷,返回截斷後的字符串的高度和寬度

  61. //字體實際的大小,存放在 actualFontSize裏

  62.     CGSize size4 = [text sizeWithFont:font  

  63.                           minFontSize:10.0f  

  64.                        actualFontSize:&f  

  65.                              forWidth:100.0f  

  66.                         lineBreakMode:NSLineBreakByWordWrapping];  

  67. }  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章