我想包装 文字放入框中,并在一些指南中提到了这种方法:
let options = NSStringDrawingOptions.usesLineFragmentOrigin.union(.usesFontLeading)
let estimatedFrame = NSString(string: messageText).boundingRect(with: size, options: options, attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 18)], context: nil)
我试过,一切正常,但是当我删除.usesFontLeading文本框保持不变。什么都没有改变
然后我试图删除usesLineFragmentOrigin选项并离开usesFontleading,我被赋予了“怪异”的结果
因为xcode说:
usesFontLeading:使用前导字体来计算线高。
但我没有在结果图片中注意到fontLeading选项的存在。也许我错了?这个选项究竟做了什么?
答案 0 :(得分:1)
这是将选项传递给boundingRect
方法
let estimatedFrame = NSString(string: messageText).boundingRect(with: size, options: [.usesLineFragmentOrigin, .usesFontLeading], attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 18)], context: nil)
这是AppleDocs关于.usesFontLeading
选项的说法
使用前导字体来计算线高。
进一步研究https://developer.apple.com/documentation/uikit/nsstring.drawingoptions
测试搜索差异
这(您的原始版本)
let options = NSStringDrawingOptions.usesLineFragmentOrigin.union(.usesFontLeading)
debugPrint(options)
<强>打印强>
__ C.NSStringDrawingOptions(rawValue:3)
这(正确版本)
let optionsArr : [NSStringDrawingOptions] = [.usesFontLeading,.usesLineFragmentOrigin]
debugPrint(optionsArr)
<强>打印强>
[__ C.NSStringDrawingOptions(rawValue:2), __C.NSStringDrawingOptions(rawValue:1)]
正如您所看到的,存在一些差异