- 更新日: 2015年6月23日
- Swift & iOS
SwiftでUITextViewの行間を設定
Swift で UITextView を使う場合に、文字列の行間を設定する方法です。CSS でいう line-height のようなもの。NSMutableParagraphStyle() の lineSpacing と paragraphSpacing を使って設定することができました。…が、後述してますけど未解決の問題もありです。
— 環境 —
Swift 1.2
Xcode 6.3.2
NSMutableParagraphStyle() の lineSpacing と paragraphSpacing で行間を指定
以下のように NSMutableParagraphStyle() の lineSpacing と paragraphSpacing を使うコードで、Swift で UITextView に文字列を表示する際に行間を設定できました。文字列 textString は “\n”(改行文字)で区切られています。
UITextViewController.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
class UITextViewController: UIViewController { // ... @IBOutlet weak var textView: UITextView! @IBOutlet weak var textViewHeight: NSLayoutConstraint! override func viewDidLoad() { super.viewDidLoad() // set up UITextView let textString: String = "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\nUt enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\nExcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\nNam liber te conscient to factor tum poen legum odioque civiuda." textView.text = textString textView.editable = false textView.scrollEnabled = false // set textString style var textStyle = NSMutableParagraphStyle() // space between each line textStyle.lineSpacing = 3.0 // space after "\n" textStyle.paragraphSpacing = 10.0 // set textString font style let textFontStyle: String = "Hiragino Kaku Gothic ProN W6" let textFontSize: CGFloat = 13.5 let textFont = UIFont(name: textFontStyle, size: textFontSize)! // set all style attributes let attributes: Dictionary = [NSParagraphStyleAttributeName: textStyle, NSFontAttributeName: textFont] textView.attributedText = NSAttributedString(string: textString, attributes: attributes) // adjust height of UITextView let textViewFrame = CGSizeMake(300, CGFloat.max) let textViewRect = textView.sizeThatFits(textViewFrame) textViewHeight.constant = textViewRect.height } // ... } |
これで、上記画像のように行間の微調整を行えたのですが…
長い文字列になると末尾のほうが切れる問題発生
色々と試してみたところ、文字列がさらにかなり長い場合に、文字列の末尾のほうが切れて、スクロールしても文字列の末尾のほうが表示されないという問題が発生しました。(Xcode の iOS Simulator 上の確認で)
UITextView の高さは、コードの最後のほうで、文字列の長さに対応して NSLayoutConstraint を通じて動的に高さを変更するようにしています(しているつもりです)。でも、文字列が長くなるとなぜか切れてしまう…。
これはまだ未解決ですが、さらっと検索した感じだと結構同じ問題にぶち当たってる方も多い模様です。
uitextview cut off – Google 検索
コードの書き方がまずい可能性も高いので、もう少し調査してみます。Swift/iOS 開発に詳しくてご存知の方がおられましたら、ぜひ教えて下さいませ!
- Swift & iOS の関連記事
- WKWebView/UIWebViewでウェブページが真っ白
- Unityのインストールと初期設定
- WKWebView/UIWebViewでNavigation Barの下にウェブページが隠れるのを回避
- SwiftでArray(配列)などをシャッフル
- Navigation Controllerで画面遷移させるSwiftコード
- Swiftでタップ/スワイプのイベント処理実装・UITapGestureRecognizerとUISwipeGestureRecognizer
- UIPageViewController画面下部のUIPageControlを非表示にする
- Swiftのバージョン確認・REPL実行
- Xcode7.0アップデートで遭遇した課題2つ
- 正規のXcodeかどうかチェック(XcodeGhostマルウェア騒動)
Leave Your Message!