はじめに
SnapKitを使いコードベースでレイアウトを組むようになってからテキストを持つUI部品の幅や高さを意識するようになりました。ここではwidthやheightを自動で設定する方法について記録を残します。
悩み
コードベースでレイアウトを組むようにしたものの、width
とheight
の設定が上手くいかない!というかメンドくさい!
private func setupLabel() {
label.text = "あいうえお"
label.backgroundColor = .red
view.addSubview(label)
label.snp.makeConstraints {
$0.width.equalTo(60)//ここを定数にしてしまっているため、いい感じになるまで何度も確認しなければならない
$0.height.equalTo(30)//同様
$0.center.equalToSuperview()
}
}
}
解決方法
sizeThatFits
とgreatestFiniteMagnitude
を使います。
private func setupLabel() {
label.text = "あいうえお"
label.backgroundColor = .red
let size = label.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude))
view.addSubview(label)
label.snp.makeConstraints {
$0.width.equalTo(size.width)
$0.height.equalTo(size.height)
$0.center.equalToSuperview()
}
}