LoginSignup
16
14

More than 5 years have passed since last update.

【Swift】UIScrollViewに可変のUILabelを配置する

Last updated at Posted at 2016-03-30

限られたスペースにテキストを表示させる時に、
テキストの文字数に応じてスクロールして表示する方法です。

  • 表示するテキストは可変
  • フォントを小さくしたくない
  • 長いテキストも全て表示したい

上記のことを実現するため、最初は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が入っているようです。
場合によって使い分けたいと思います。

まだまだ勉強中なので、もっといいやり方などありましたら、
教えていただけると嬉しいです。

16
14
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14