【swift】uiscrollviewを更新する方法メモ
はじめに
今回やりたかったことは以下
・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)
}
}このやり方が正解かわからないけどとりあえずやりたいことはできた。
以上です