Replacement for deprecated sizeWithFont: in iOS 7?
来源:互联网 发布:ddos攻击代码python 编辑:程序博客网 时间:2024/05/17 01:14
I believe the function was deprecated because that series of NSString+UIKit
functions (sizewithFont:...
, etc) were based on the UIStringDrawing
library, which wasn't thread safe. If you tried to run them not on the main thread (like any other UIKit
functionality), you'll get unpredictable behaviors. In particular, if you ran the function on multiple threads simultaneously, it'll probably crash your app. This is why in iOS 6, they introduced a the boundingRectWithSize:...
method for NSAttributedString
. This was built on top of the NSStringDrawing
libraries and is thread safe.
If you look at the new NSString
boundingRectWithSize:...
function, it asks for an attributes array in the same manner as a NSAttributeString
. If I had to guess, this new NSString
function in iOS 7 is merely a wrapper for the NSAttributeString
function from iOS 6.
On that note, if you were only supporting iOS 6 and iOS 7, then I would definitely change all of your NSString
sizeWithFont:...
to the NSAttributeString
boundingRectWithSize
. It'll save you a lot of headache if you happen to have a weird multi-threading corner case! Here's how I converted NSString
sizeWithFont:constrainedToSize:
:
What used to be:
NSString *text = ...;CGFloat width = ...;UIFont *font = ...;CGSize size = [text sizeWithFont:font constrainedToSize:(CGSize){width, CGFLOAT_MAX}];
Can be replaced with:
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;
Please note the documentation mentions:
In iOS 7 and later, this method returns fractional sizes (in the size component of the returned
CGRect
); to use a returned size to size views, you must use raise its value to the nearest higher integer using the ceil function.
So to pull out the calculated height or width to be used for sizing views, I would use:
CGFloat height = ceilf(size.height);CGFloat width = ceilf(size.width);
- Replacement for deprecated sizeWithFont: in iOS 7?
- 'sizeWithFont:' is deprecated: first deprecated in iOS 7.0 - Use -sizeWithAttributes:
- sizeWithFont:constrainedToSize:' is deprecated: first deprecated in iOS 7.0 - Use -boundingRectWithS
- Deprecated in iOS 5.0
- addTimeInterval Deprecated in iOS 4.0
- 置换过时sizeWithFont:在iOS的7
- sizeWithFont in MultiThread Crash!
- 'dispath_get_current_queue'is deprecated:fist deprecated in iOS 6.0的解决办法
- cString is deprecated :first deprecated in iOS 2.0
- "dismissModalViewControllerAnimated" is deprecated : first deprecated in iOS 6.0
- [问题记录]cString is deprecated :first deprecated in iOS 2.0
- [问题记录]'dismissModalViewControllerAnimated:' is deprecated: first deprecated in iOS 6.0
- UITextAlignmentCenter' is deprecated: first deprecated in iOS 6.0 UITextAlignmentCenter
- 'minimumFontSize' is deprecated: first deprecated in iOS 6.0
- Drop-in replacement for UINavigationController with custom transition animations
- ios sizeWithFont:constrainedToSize:
- iOS 之sizeWithFont详细
- NSDate addTimeInterval Deprecated in iOS 4.0
- [LeetCode] Move Zeroes
- JSP,Servlet,JSF 的区别
- android 之输入法
- hibernate的Transaction接口理解
- 修改WSAD的默认工作区(转)
- Replacement for deprecated sizeWithFont: in iOS 7?
- linux下更改ip地址方法
- 数据链路层HDLC与PPP协议
- easyui对话框注意的地方
- Leap Motion自带Sample之详解_Win/C++版本
- 常用maven jar 依赖
- 自定义控件
- 正则化方法:L1和L2 regularization、数据集扩增、dropout
- 创建者模式