马尔代夫的薇拉瓦鲁岛吃的怎么样有wifi么

iOS中,根据给定的内容、字体,宽度,计算文本高度的函数,iOS7之前使用sizeWithFont,iOS7之后使用boundingRectWithSize。&/span&
- boundingRectWithSize:options:attributes:context:
Calculates and returns the bounding rect for the receiver drawn using the given options and display characteristics, within the specified rectangle in the current graphics context.
Discussion
To correctly draw and size multi-line text, pass NSStringDrawingUsesLineFragmentOrigin in the options parameter.
This method returns fractional sizes (in the size component of the returned CGRect); to use a returned size to size views, you must raise its value to the nearest higher integer using the ceil function.
This method returns the actual bounds of the glyphs in the string. Some of the glyphs (spaces, for example) are allowed to overlap the layout constraints specified by the size passed in, so in some cases the width value of the size component of the returned CGRect can exceed the width value of the size parameter.
根据Discussion描述,返回值CGRect的Size含有小数点,如果使用函数返回值CGRect的Size来定义View大小,必需使用“ceil”函数获取长宽(ceil:大于当前值的最小正数)。
先贴一段自己写的,使用代码:
传入文本内容、字体(这里使用屏幕宽度)
返回矩形区域,注意返回的CGSize长宽必需使用ceil处理
+ (CGSize)sizeForNoticeTitle:(NSString*)text font:(UIFont*)font{
CGRect screen = [UIScreen mainScreen].
CGFloat maxWidth = screen.size.
CGSize maxSize = CGSizeMake(maxWidth, CGFLOAT_MAX);
CGSize textSize = CGSizeZ
// iOS7以后使用boundingRectWithSize,之前使用sizeWithFont
if ([text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) {
// 多行必需使用NSStringDrawingUsesLineFragmentOrigin,网上有人说不是用NSStringDrawingUsesFontLeading计算结果不对
NSStringDrawingOptions opts = NSStringDrawingUsesLineFragmentOrigin |
NSStringDrawingUsesFontL
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineBreakMode:NSLineBreakByCharWrapping];
NSDictionary *attributes = @{ NSFontAttributeName : font, NSParagraphStyleAttributeName : style };
CGRect rect = [text boundingRectWithSize:maxSize
options:opts
attributes:attributes
context:nil];
textSize = rect.
textSize = [text sizeWithFont:font constrainedToSize:maxSize lineBreakMode:NSLineBreakByCharWrapping];
return textS
这还不是我们今天讨论的坑。
坑在这!坑在这!坑在这!(重说三)
boundingRectWithSize: 方法只是取得字符串的size, 如果字符串中包含\n\r 这样的字符,也只会把它当成字符来计算。但放到UITextView中来解析时,会把它变成回车换行符,那么在显示时就会多出一行的高度出来。
而且,使用stringWithFormat才会忽略\n,使用@“”形式不会。
矬点的做法,大体的实际高度 = boundingRectWithSize计算出来的高度 + \n\r出现的次数 * 单行文本的高度
延伸阅读:
& & &boundingRectWithSize:options:attributes:context:用法
以上就介绍了使用boundingRectWithSize计算内容高度的坑,包括了方面的内容,希望对IOS开发有兴趣的朋友有所帮助。
本文网址链接:/article/detail_155574.html
上一篇: 下一篇:您所在的位置: &
Swift 的坑:如何实现 enum 的多选
Swift 的坑:如何实现 enum 的多选
在OC里,enum是可以多选的。把两个enum值用|或起来,就能达到多选的效果。现在的问题是,在swift里,如何实现相同的效果呢?本文我们来揭晓答案。
在OC里,enum是可以多选的。如:
NSString*&string&=&@&一段文字&;&CGRect&boundingRect&=&[string&boundingRectWithSize:CGSizeMake(label.frame.width,&CGFloat.max)&options:NSStringDrawingUsesLineFragmentOrigin&|&NSStringDrawingUsesFontLeading&attributes:attributes&context:nil];&
把两个enum值用|或起来,就能达到多选的效果。
现在的问题是:在swift里,如何实现相同的效果呢?
Swift中的option类型
swift的enum不支持多选,所以能够多选的option类型应该用struct : RawOptionSet来实现。要自己实现options类型,可以参考。
官方的SDK正是采取这种方法移植的。
正确的写法
以上例子中的代码,用swift正确的写法如下:
let&options&:&NSStringDrawingOptions&=&.UsesLineFragmentOrigin&|&.UsesFontLeading&let&boundingRect&=&string.bridgeToObjectiveC().boundingRectWithSize(CGSizeMake(label.frame.width,&CGFloat.max),&options:&options,&attributes:&attributes,&context:&nil)&
在OS X 10.10中这样写就可以了。
iOS SDK 的 bug
但在目前版本的iOS 8 SDK中,这样的写法编译通不过。这是在iOS 8的SDK里,NSStringDrawingOptions被移植为了enum : Int,而不是struct : RawOptionSet。
如何解决这个问题呢?只能借用下OC来workaround了。
因为用到的options都相同,我只是简单地写了这个类:
@interface&OCUtils&:&NSObject&+&(NSStringDrawingOptions)stringDrawingO&@end&
#import&&OCUtils.h&&@implementation&OCUtils&+&(NSStringDrawingOptions)stringDrawingOptions{&return&NSStringDrawingTruncatesLastVisibleLine&|&NSStringDrawingUsesLineFragmentOrigin&|&NSStringDrawingUsesFontL&}&@end&
在Bridging-Header.h中加上:
#import&&OCUtils.h&&
用到的swift文件
let&boundingRect&=&string.bridgeToObjectiveC().boundingRectWithSize(CGSizeMake(label.frame.width,&CGFloat.max),&options:&OCUtils.stringDrawingOptions(),&attributes:&attributes,&context:&nil)&
如果有进一步的需求,可以改得更通用一些。总体原理只能这样了。
本文参考:
原文:【编辑推荐】【责任编辑: TEL:(010)】
关于&&&&的更多文章
苹果在2014WWDC上发布的新编程语言Swift相信牵动着大部分iOS开发
随着云计算、物联网、大数据、移动互联网的大发展,你应该知道这些。
讲师: 12人学习过讲师: 21人学习过讲师: 3人学习过
国际消费类电子产品展览会(International Consumer E
你心爱的那些移动游戏为什么会如此吸引你?就是那些你
本专题意在帮助想要了解Android的人能快速上手Android
本书是全国计算机技术与软件专业技术资格(水平)考试的指定用书。按照新的网络工程师考试大纲的规定,本书包含了数据通信基础知
Windows Phone专家
Android开发专家
51CTO旗下网站Swift&计算label高度与长度(自适配高度的时候可用)
//获取高度
func getLabHeight(labelStr:String,font:UIFont,width:CGFloat)
statusLabelText:
= CGSizeMake(width,
= NSDictionary(object:
font, forKey: NSFontAttributeName)
statusLabelText.boundingRectWithSize(size,
options: .UsesLineFragmentOrigin, attributes: dic
AnyObject],
context: nil).size
strSize.height
//获取宽度
getLabWidth(labelStr:String,font:UIFont,height:CGFloat)
-& CGFloat
statusLabelText:
= CGSizeMake(900,
= NSDictionary(object:
font, forKey: NSFontAttributeName)
statusLabelText.boundingRectWithSize(size,
options: .UsesLineFragmentOrigin, attributes: dic
AnyObject],
context: nil).size
strSize.width
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。11120人阅读
IOS(116)
新api计算高度不准确时,请注意参数问题,
options,attributes
CGRect rect= [str boundingRectWithSize:CGSizeMake(100, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:20.0]} context:nil];
其中,options 参数请使用:NSStringDrawingUsesLineFragmentOrigin&|&NSStringDrawingUsesFontLeading
设置两个枚举,不要设置一个。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:879613次
积分:8005
积分:8005
排名:第2107名
原创:88篇
转载:133篇
评论:158条
(1)(1)(1)(7)(1)(4)(2)(1)(2)(3)(1)(2)(3)(14)(12)(8)(16)(1)(1)(2)(3)(6)(11)(9)(9)(11)(2)(2)(3)(4)(13)(12)(4)(6)(7)(6)(5)(1)(1)(1)(2)(4)(3)(13)(2)

我要回帖

更多关于 马代薇拉瓦鲁岛 的文章

 

随机推荐