読者です 読者をやめる 読者になる 読者になる

【swift】uiscrollviewを更新する方法メモ

swift ios

はじめに

今回やりたかったことは以下
・UIScrollViewの中にUILabelをもつ
・UILabelのテキストにはAPIから取得した値をセットする
・テキストの文字数が多いのでUIScrollViewの高さをセットしてテキスト全体がみれるようにする

今まではUITableViewのヘッダーを利用してreloadData()していた。
が、0行なのにテーブルビュー使うのはもちろん無駄なのでUIScrollViewを使ってみることにした。

実装

import UIKit

class DocumentDetailViewController: BaseViewController {

    var scrollView: UIScrollView!
    var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        callApi()
        setView()
    }

    func setView() {
        scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height))

        label = UILabel()
        label.font = UIFont.boldSystemFont(ofSize: 13)
        label.numberOfLines = 0

        view.addSubview(scrollView)
    }

    func callApi() {
        // 本来はAPIから取得した値をセット                                                                                                                                                             
        // ここでは3秒後に処理を行う形としている                                                                                                                                                         
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(3)) {
            self.adjustScrollView(description: contents["description"] as! String)
        }
    }

    func adjustScrollView(content: String) {
        // UILabelの高さをもとめる                                                                                                                                                                         
        label.text = content
        let rect = label.sizeThatFits(CGSize(width: scrollView.frame.width-(5*2), height: 99999))
        label.frame = CGRect(x: 5, y: 5, width: rect.width, height: rect.height)
        scrollView.addSubview(label)
        // UILabelの高さからUIScrollViewの高さを決定してセット                                                                                                                                                     
        scrollView.contentSize = CGSize(width: rect.width, height: rect.height + 5)
    }
}

このやり方が正解かわからないけどとりあえずやりたいことはできた。
以上です