我将如何执行以下操作 - 在swift中将两个NSStringDrawing选项作为函数参数传递:
CGRect boundingRect = [string boundingRectWithSize:CGSizeMake(280.0, NSIntegerMax)
options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
attributes:options context:nil];
Run Code Online (Sandbox Code Playgroud)
aka*_*kyy 69
编辑:在Swift 3.0中:
let options: NSStringDrawingOptions = [.usesLineFragmentOrigin, .usesFontLeading]
Run Code Online (Sandbox Code Playgroud)
编辑:这是你如何使用Swift 2.0中的选项枚举:
let options: NSStringDrawingOptions = [.UsesLineFragmentOrigin, .UsesFontLeading]
Run Code Online (Sandbox Code Playgroud)
编辑:此问题已在iOS 8.3 SDK Beta 1(12F5027d)中得到解决:
修改
NSStringDrawingOptions[struct]
- 从:
enum NSStringDrawingOptions : Int- 至:
struct NSStringDrawingOptions : RawOptionSetType
你现在可以写:
let options : NSStringDrawingOptions = .UsesLineFragmentOrigin | .UsesFontLeading
Run Code Online (Sandbox Code Playgroud)
经过一些研究和@Anton Tcholakov的"评论":
如果您的目标是OS X 10.10,这是一种简单的方法:
let size = CGSize(width: 280, height: Int.max)
let options : NSStringDrawingOptions = .UsesLineFragmentOrigin | .UsesFontLeading
let boundingRect = string.bridgeToObjectiveC().boundingRectWithSize(size, options: options, attributes: attributes, context: nil)
Run Code Online (Sandbox Code Playgroud)但是,在iOS 8 SDK中(在当前种子中),有一个错误,其中NSStringDrawingOptions移植到Swift enum : Int而不是struct : RawOptionSet.你应该向Apple发送一个错误报告来描述这个严重的问题.
Ale*_*tyy 21
更新了Xcode 6.3的答案:
在Xcode 6.3 Beta(Swift 1.2)中,这是最终修复的,你现在可以这样做:
let boundingRect = "string".boundingRectWithSize(size, options: .UsesLineFragmentOrigin | .UsesFontLeading, attributes:nil, context:nil)
Run Code Online (Sandbox Code Playgroud)
对于旧版本:
它看起来像当前测试版中的一个错误,现在我编写Objective-C方法并使用Swift:
+ (NSStringDrawingOptions)combine:(NSStringDrawingOptions)option1 with:(NSStringDrawingOptions)option2
{
return option1 | option2;
}
Run Code Online (Sandbox Code Playgroud)
和调用形式Swift:
let boundingRect = "string".boundingRectWithSize(size, options: StringDrawingOptions.combine(.UsesLineFragmentOrigin, with: .UsesFontLeading), attributes:nil, context:nil)
Run Code Online (Sandbox Code Playgroud)
另一种解决方案,使用unsafeBitCast.
如下所示:
let options = unsafeBitCast(NSStringDrawingOptions.UsesLineFragmentOrigin.rawValue |
NSStringDrawingOptions.UsesFontLeading.rawValue,
NSStringDrawingOptions.self)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18179 次 |
| 最近记录: |