2017-11-06 1 views
0

私は、コレクションビューセルの推定高さを得るためにテキストの高さを計算したいと思います。私はcollectionViewLayoutの機能の中で次のコードを使用します。NSAttributedStringKey.fontをカスタムフォントとして宣言するにはどうすればよいですか?

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) 
} 

これはシステムフォントでは機能しますが、私のプロジェクトではカスタムフォントでは機能しません。問題は、estimatedFrameがシステムフォントの結果と等しくないことです。私は問題がオプションのパラメータになると思う:attributes。カスタムフォント用にUIFont.systemFont(ofSize: 17)のような方法はありますか?

答えて

2

私はあなたの質問の権利を読んでいる場合は、希望:だから

UIFont(name: "yourCustomFontNameString", size: 17) 

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(name: "yourCustomFontNameString", size: 17)], context: nil) 
     return CGSize(width: view.frame.width, height: estimatedFrame.height + 20) 
    } 

    return CGSize(width: view.frame.width, height: 100) 
} 
+0

これは、エラーがスローされます: '引数ラベル '(名前:, ofSizeを:)' を実行します利用可能なオーバーロードに一致しない 'もちろん、文字列名を自分のフォント名に変更しました。 – Caspert

+0

はい、上記のスニペットを実装したときにのみ、フォントが正しく読み込まれます。 'Argument labels '(name :, ofSize:)のエラーがスローされます。 – Caspert

+0

ああ、愚かです。 'size'は' ofSize'ではなくSwift 4(おそらく3)のために変更しました。 – brandonscript

関連する問題