文字小包の実現

1578 ワード

「文字小包」の実装(何ですか?「文字列」全体がどれだけ大きいか、labelがどれだけ大きいか)
  • フォントのサイズ(文字のサイズ、文字列全体の幅と高さに直接影響する
  • )を設定します.
  • 文字が実際に占有する幅と高さ
  • を取得する.
  • 特定のlabelに
  • を割り当てる
    //       -   :17,  :    
    NSDictionary *nameAttr = @{NSFontAttributeName:[UIFont systemFontOfSize:17]};
    //  '   '        
    CGSize nameSize = [self.status.name sizeWithAttributes:nameAttr];
    CGFloat nameW = ceil(nameSize.width);
    CGFloat nameH = ceil(nameSize.height);
    //  label frame
    self.nameLabel.frame = CGRectMake(nameX, nameY, nameW, nameH);
    
        :
          ,        :12 ,   :Helvetica(Neue)
    
    sizeWithAttributes:
           ? NSString   .
     - (CGSize)sizeWithAttributes:(NSDictionary *)attrs;
          ?   ,               .(                )
    
     NSAttributedString
           ?        .@interface NSAttributedString : NSObject
          ?      ,              ( :   ,   ,     )
    
     NSAttributedStringKey
           ?  NSAttributedString   (Constants)
                typedef NSString *NSAttributedStringKey;
          ?           (NSAttributedString)     (Key).
                      ,  Key   .
    
     NSFontAttributeName
           ?  'NSAttributedStringKey'     .           (UIFont)
            Value UIFont  .
    

    注意:sizeWithAttributesメソッド
  • 戻り高さは1行の高さです.
  • NSString str =@"abcd
    efg";
    //真ん中に
    を入れて改行する.
  • CGSize tempSize = [str sizeWithAttributes: @{NSFontAttributeName:[UIFont systemFontOfSize:17]} ];
    
    tempSize      @"abcd"   . 
      , @"abcdefg"