.usesFontLeading不起作用

时间:2018-01-29 11:24:17

标签: ios swift nsstring

我想包装  文字放入框中,并在一些指南中提到了这种方法:

  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文本框保持不变。什么都没有改变

enter image description here

然后我试图删除usesLineFragmentOrigin选项并离开usesFontleading,我被赋予了“怪异”的结果

enter image description here

因为xcode说:

  

usesFontLeading:使用前导字体来计算线高。

但我没有在结果图片中注意到fontLeading选项的存在。也许我错了?这个选项究竟做了什么?

1 个答案:

答案 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)]

正如您所看到的,存在一些差异