Swift 如何为自定义字体声明NSAttributedStringKey.font?
我想计算文本的高度,以获得集合视图单元格的估计高度。我在Swift 如何为自定义字体声明NSAttributedStringKey.font?,swift,Swift,我想计算文本的高度,以获得集合视图单元格的估计高度。我在collectionViewLayout函数中使用了以下代码 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { if let messageText = messa
collectionViewLayout
函数中使用了以下代码
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
if let messageText = messages[indexPath.row]?.text {
let size = CGSize(width: view.frame.width, height: 1000)
let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin)
let estimatedFrame = NSString(string: messageText).boundingRect(with: size, options: options, attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 17)], context: nil)
return CGSize(width: view.frame.width, height: estimatedFrame.height + 20)
}
return CGSize(width: view.frame.width, height: 100)
}
这适用于系统字体,但不适用于项目中的自定义字体。问题是估计的帧与系统字体的结果不相等。我认为问题在于选项参数:
属性
。对于自定义字体,是否有类似于UIFont.systemFont(of size:17)
的方法?如果我没有看错您的问题,您需要:
UIFont(name: "yourCustomFontNameString", size: 17)
因此:
如果我没看错你的问题,你想:
UIFont(name: "yourCustomFontNameString", size: 17)
因此:
这将抛出一个错误:`Argument labels'(名称:,Of Size:)'与任何可用的重载都不匹配`当然,我将字符串名称更改为我的字体名称。是的,字体加载正确,只有在我实现上述代码段时,才会抛出
Argument labels'(名称:,Of Size:)
噢,愚蠢的我-这是一个编译错误而不是运行时错误<代码>大小不是大小的-他们将其更改为Swift 4(可能是3)。您可能还需要强制展开它:UIFont(名称:“yourCustomFontNameString”,大小:17)代码>这将抛出一个错误:`Argument labels'(name:,Of size:)'与任何可用的重载都不匹配`当然,我将字符串名称更改为我的字体名称。是的,字体加载正确,只有当我实现上述代码段时,它才会抛出Argument labels'(name:,Of size:)的错误。
噢,愚蠢的我-这是一个编译错误而不是运行时错误<代码>大小
不是大小
的-他们将其更改为Swift 4(可能是3)。您可能还需要强制展开它:UIFont(名称:“yourCustomFontNameString”,大小:17)代码>