亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

取代過時的尺寸字體:在iOS 7中?

取代過時的尺寸字體:在iOS 7中?

POPMUISE 2019-07-01 16:07:03
取代過時的尺寸字體:在iOS 7中?在IOS 7中,sizeWithFont:現在不受歡迎了?,F在如何將UIFont對象傳遞到替換方法中?sizeWithAttributes:?
查看完整描述

3 回答

?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

我認為這個功能被廢棄是因為NSString+UIKit職能(sizewithFont:...等)是基于UIStringDrawing庫不是線程安全的。如果您試圖在主線程上運行它們(與任何其他線程一樣)UIKit(功能),您將得到不可預測的行為。特別是,如果您同時在多個線程上運行該函數,它可能會使您的應用程序崩潰。這就是為什么在iOS 6中,他們引入了一個boundingRectWithSize:...方法NSAttributedString..這是建在NSStringDrawing庫,并且是線程安全的。

如果你看看新的NSString boundingRectWithSize:...函數中,它請求屬性數組的方式與NSAttributeString..如果我不得不猜的話,這個新的NSString函數在IOS 7中只是一個包裝器。NSAttributeString功能來自iOS 6。

在這一點上,如果您只支持IOS 6和IOS 7,那么我肯定會更改所有NSString sizeWithFont:...NSAttributeString boundingRectWithSize..如果你有一個奇怪的多線程角落的情況,你會省去很多頭痛!以下是我如何轉換NSString sizeWithFont:constrainedToSize::

過去的情況是:

NSString *text = ...;CGFloat width = ...;UIFont *font = ...;CGSize size = [text sizeWithFont:font 
               constrainedToSize:(CGSize){width, CGFLOAT_MAX}];

可替換為:

NSString *text = ...;CGFloat width = ...;UIFont *font = ...;NSAttributedString *attributedText =
    [[NSAttributedString alloc] initWithString:text 
                                    attributes:@{NSFontAttributeName: font}];CGRect rect = [attributedText boundingRectWithSize:(CGSize){width, CGFLOAT_MAX}
                                           options:NSStringDrawingUsesLineFragmentOrigin
                                           context:nil];CGSize size = rect.size;

請注意所提到的文件:

在IOS 7和更高版本中,此方法返回小數大小(在返回的大小組件中)。CGRect);若要使用返回的大小來調整視圖的大小,必須使用ceil函數將其值提高到最近的較高整數。

因此,要提取用于調整視圖大小的計算出的高度或寬度,我將使用:

CGFloat height = ceilf(size.height);CGFloat width  = ceilf(size.width);


查看完整回答
反對 回復 2019-07-01
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

如你所見sizeWithFont在Apple Developer站點上,它被廢棄了,所以我們需要使用sizeWithAttributes.

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)NSString *text = @"Hello iOS 7.0";if (SYSTEM_VERSION_LESS_THAN(@"7.0")) {
    // code here for iOS 5.0,6.0 and so on
    CGSize fontSize = [text sizeWithFont:[UIFont fontWithName:@"Helvetica" 
                                                         size:12]];} else {
    // code here for iOS 7.0
   CGSize fontSize = [text sizeWithAttributes: 
                            @{NSFontAttributeName: 
                              [UIFont fontWithName:@"Helvetica" size:12]}];}


查看完整回答
反對 回復 2019-07-01
  • 3 回答
  • 0 關注
  • 667 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號