いつもお世話になっております。長い文章を入れたあと、その文がぴったり入る高さをsizeToFit()場合、横幅も若干変わってしまいます。
sizeToFit()後に、変更前の横幅を適用すると、文が入りきらなくなり、さいごが「・・・」で表示されてしまいす。
横幅を固定したまま、サイズぴったりに高さを取得するにはどのようにすればよいのでしょうか。ご教示いただけますと幸いです。
よろしくお願いいたします。
Swift
1 2class PaddingLabel: UILabel { 3 4 @IBInspectable var padding: UIEdgeInsets = UIEdgeInsets(top: 4, left: 8, bottom: 4, right: 8) 5 6 override func drawText(in rect: CGRect) { 7 let newRect = UIEdgeInsetsInsetRect(rect, padding) 8 super.drawText(in: newRect) 9 } 10 11 override func sizeThatFits(_ size: CGSize) -> CGSize { 12 var contentSize = super.sizeThatFits(size) 13 contentSize.width += padding.left + padding.right 14 contentSize.height += padding.top + padding.bottom 15 return contentSize 16 } 17 18} 19 20let contentsLabel = UILabel() 21contentsLabel = PaddingLabel(frame: CGRect(x: 0, y: 0, width: 258.25, height: 100)) 22contentsLabel.font = UIFont(name:"HiraKakuProN-W3", size: 16) 23contentsLabel.backgroundColor = UIColor.white 24contentsLabel.numberOfLines = 0 25contentsLabel.text = "長い文章・・・・・・・・・" 26print(contentsLabel.frame.width) //258.25 27contentsLabel.sizeToFit() 28print(contentsLabel.frame.width) // 271.0
必要な情報を省略しないでください。例えば .numberOfLines = ? などは必要な情報です。(最低限、症状を再現できるコードを書いて下さい)
これ、昨日の質問の続きですか?(別の質問ならかまわないのですが)
いつもご回答ありがとうございます。失礼いたしました。コード追記しました。
昨日の問題とは少々違うのですが、こういった方法で高さを取得できるのであれば、そのようにしたいという考えております。
PaddingLabelのコードを書いて下さい。やっぱり昨日の続きですよね?sizeThatFits(_:)の中にどう書けば分からない、ということではないのでしょうか?
ご回答ありがとうございます。コードを追記しました。ご教示いただいた方法でsizeToFit自体は効いていたのですが、幅が若干可変してしまう部分がうまくいかず…
昨日の「テキストが横幅より短い場合‥」と同じ問題かと思いましたが、微妙に違いますね。ちょっと考えてみます。

回答1件
あなたの回答
tips
プレビュー