質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

8912閲覧

Swift sizeToFitメソットで、幅は変更しないようにする

lyzmfeqpxs54

総合スコア237

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/07/18 04:47

編集2018/07/18 06:15

いつもお世話になっております。長い文章を入れたあと、その文がぴったり入る高さを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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2018/07/18 05:22 編集

必要な情報を省略しないでください。例えば .numberOfLines = ? などは必要な情報です。(最低限、症状を再現できるコードを書いて下さい)
fuzzball

2018/07/18 05:29 編集

これ、昨日の質問の続きですか?(別の質問ならかまわないのですが)
lyzmfeqpxs54

2018/07/18 05:47

いつもご回答ありがとうございます。失礼いたしました。コード追記しました。
lyzmfeqpxs54

2018/07/18 05:49

昨日の問題とは少々違うのですが、こういった方法で高さを取得できるのであれば、そのようにしたいという考えております。
fuzzball

2018/07/18 05:54

PaddingLabelのコードを書いて下さい。やっぱり昨日の続きですよね?sizeThatFits(_:)の中にどう書けば分からない、ということではないのでしょうか?
lyzmfeqpxs54

2018/07/18 06:18

ご回答ありがとうございます。コードを追記しました。ご教示いただいた方法でsizeToFit自体は効いていたのですが、幅が若干可変してしまう部分がうまくいかず…
fuzzball

2018/07/18 06:30

昨日の「テキストが横幅より短い場合‥」と同じ問題かと思いましたが、微妙に違いますね。ちょっと考えてみます。
guest

回答1

0

ベストアンサー

「テキストが横幅より短い場合」にも対応しています。
これ以上フォローしないので覚悟して使って下さい。

swift

1override func sizeThatFits(_ size: CGSize) -> CGSize { 2 var contentSize = CGSize(width: size.width - (padding.left + padding.right), height: size.height) 3 let contentWidth = contentSize.width 4 contentSize = super.sizeThatFits(contentSize) 5 contentSize.width = max(contentWidth, contentSize.width) 6 contentSize.width += padding.left + padding.right 7 contentSize.height += padding.top + padding.bottom 8 return contentSize 9}

ちなみに私だったら、一回り(Padding分だけ)大きいViewの上にLabelを乗せます。(その方がラクチンだし)

投稿2018/07/18 06:59

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lyzmfeqpxs54

2018/07/18 09:07

ご回答ありがとうございます。ご教示いただいたコードにて、考えていた表示が可能となりました。何度もお手数をおかけして申し訳ございません。 「一回り(Padding分だけ)大きいViewの上にLabelを乗せます」のような方法もすぐ思いつけるよう努力したいと思います。 この度は本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問