Replacement for deprecated sizeWithFont: in iOS 7?
2015-11-06 16:12
501 查看
I believe the function was deprecated because that series of
(
etc) were based on the
which wasn't thread safe. If you tried to run them not on the main thread (like any other
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
for
This was built on top of the
and is thread safe.
If you look at the new
it asks for an attributes array in the same manner as a
If I had to guess, this new
in iOS 7 is merely a wrapper for the
from iOS 6.
On that note, if you were only supporting iOS 6 and iOS 7, then I would definitely change all of your
the
It'll save you a lot of headache if you happen to have a weird multi-threading corner case! Here's how I converted
What used to be:
Can be replaced with:
Please note the documentation mentions:
In iOS 7 and later, this method returns fractional sizes (in the size component of the returned
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:
NSString+UIKitfunctions
(
sizewithFont:...,
etc) were based on the
UIStringDrawinglibrary,
which wasn't thread safe. If you tried to run them not on the main thread (like any other
UIKitfunctionality),
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
NSStringDrawinglibraries
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
NSStringfunction
in iOS 7 is merely a wrapper for the
NSAttributeStringfunction
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);
相关文章推荐
- iOS程序破解——class-dump获取头文件
- Nagios排错集合
- 上传iOS项目到CocoaPods
- iOS QQ第三方登实现
- iOS开发——真机调试证书—发布证书
- iOS QQ第三方登实现
- 16.说一说iOS中与属性成员相关的坑
- 关于FPGA软核的一些总结(microblaze && NIOS II)
- ios 设置启动页
- iOS9下的Map Kit View下的使用
- iOS 开发小记 (五)
- iOS 隐藏顶部状态栏
- 招聘一个靠谱的 iOS
- 苹果开发的一些要求(汇总到这里)
- iOS 开发博客汇总
- ios原生二维码扫描
- MWPhotoBrowser, simple and elegant image library for iOS
- 2015/11/6 IOS9适配
- iOS KVC & KVO
- dSYM文件分析