2015-12-04 8 views
7

文字列の最後に空白がない文字列がありますが、NSAttributedStringに変換してUITextViewに設定すると、UILabelの最後の空白が見えます。NSAttributedStringの末尾に空白をトリム(削除)する方法

作成のためNSAttributedString次のコードを使用しています。私のコードではexpectedLabelSizeは大きな高さを与えます。

UILabel *tempLbl = [[UILabel alloc]init]; 
tempLbl.font = txtView.font; 
tempLbl.text = string; 

NSDictionary *dictAttributes = [NSDictionary dictionaryWithObjectsAndKeys: tempLbl.font, NSFontAttributeName, aParaStyle, NSParagraphStyleAttributeName,[UIColor darkGrayColor],NSForegroundColorAttributeName, nil]; 

CGSize expectedLabelSize = [string boundingRectWithSize:maximumLabelSize options:NSStringDrawingUsesLineFragmentOrigin attributes:dictAttributes context: nil].size; 
+0

「string」を初期化するコードで質問を更新してください。なぜあなたの質問は 'UITextView'について語りますか?あなたの投稿されたコードは、テキストビューについて言及していません。そして、「UILabel」はこの質問に何をしなければならないのですか? 'expectedLabelSize'には関係しません。 – rmaddy

+0

を0に設定してからsizeToFitを試しましたか? –

答えて

7

スウィフト答えていますが(その後、またはちょうどあなたのObj-Cでの使用のための拡張子を持つ迅速なファイルを作る)のObj-Cにそれを翻訳した場合、それはあなたのスタートを与える

extension NSMutableAttributedString { 

    func trimmedAttributedString(set: CharacterSet) -> NSMutableAttributedString { 

     let invertedSet = set.inverted 

     var range = (string as NSString).rangeOfCharacter(from: invertedSet) 
     let loc = range.length > 0 ? range.location : 0 

     range = (string as NSString).rangeOfCharacter(
          from: invertedSet, options: .backwards) 
     let len = (range.length > 0 ? NSMaxRange(range) : string.characters.count) - loc 

     let r = self.attributedSubstring(from: NSMakeRange(loc, len)) 
     return NSMutableAttributedString(attributedString: r) 
    } 
} 

使い方:

let noSpaceAttributedString = 
    attributedString.trimmedAttributedString(set: CharacterSet.whitespacesAndNewlines) 
+0

ありがとう、Dean。最新のSwiftのマイナーチェンジで編集しました。素晴らしいです、ありがとう – Fattie

関連する問題