限られたスペースにテキストを表示させる時に、
テキストの文字数に応じてスクロールして表示する方法です。
- 表示するテキストは可変
- フォントを小さくしたくない
- 長いテキストも全て表示したい
上記のことを実現するため、最初はUITextViewで試したのですが、
フォーカスや編集機能を無効にはできたのですが、範囲選択が無効にならず、
今回はスクロール機能だけでよかったのでUIScrollViewを使う方法にしました。
ViewController.swift
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.whiteColor()
let screenSize = UIScreen.mainScreen().bounds.size
// ScrollView と Label を作成.
let scrollView = UIScrollView(frame: CGRectMake(0, 0, 150, 150))
let textLabel = UILabel(frame: CGRectMake(0, 0, 150, 150))
textLabel.text = "長いテキストを設定"
// 表示可能最大行数を無制限にする.
textLabel.numberOfLines = 0
// コンテンツに合わせてサイズを自動調整してくれる.
textLabel.sizeToFit()
// スクリーンの中央に表示.
scrollView.layer.position = CGPoint(x: screenSize.width/2, y: screenSize.height/2)
// ScrollView に textLabel を追加する.
scrollView.addSubview(textLabel)
// ScrollView に設定した content(textLabel) のサイズを設定する.
scrollView.contentSize = CGSizeMake(textLabel.frame.width, textLabel.frame.height)
// View に ScrollView を追加.
self.view.addSubview(scrollView)
}
#追記
u39uedaさんに教えていただきUITextViewでもできました。
let textView = UITextView(frame: CGRectMake(0, 0, 150, 150))
textView.text = "長いテキストを設定"
// 編集機能を無効にする.
textView.editable = false
// 範囲選択を無効にする.
textView.selectable = false
textView.layer.position = CGPoint(x: screenSize.width/2, y: screenSize.height/2)
self.view.addSubview(textView)
UITextViewにはデフォルトでpaddingが入っているようです。
場合によって使い分けたいと思います。
まだまだ勉強中なので、もっといいやり方などありましたら、
教えていただけると嬉しいです。