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

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

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

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

Swift

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

Q&A

解決済

1回答

8111閲覧

【Swift,Xcode】Labelのサイズを動的にリサイズ(変更)したい

nekokichi

総合スコア54

Xcode

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

Swift

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

0グッド

0クリップ

投稿2018/10/25 05:28

編集2018/10/25 06:16

入力した文字数によって、Labelの大きさをリサイズできるようにしたいです。

Labelの1行内に収まればそのまま表示され、
1行以内に収まらなければ改行して次の行に表示されるようにです。

簡単にいうと、Labelで文字列をLINEのメッセージのように表示したいのです。

イメージ説明

そこで、Labelを動的に変更するには、

  • 本文
  • フォント
  • 行数
  • lineBreakMode
  • sizeToFit

をlabelのプロパティに設定する必要があると知り、実装してみました。

https://youtu.be/60YH9sgAlUA

ただ、Labelを動的に可変することはできたのですが、Labelに表示されている文字列よりも少ない文字数の文字列をLabelに設定すると、それ以降、Labelの幅が固定されてしまいます。

具体的に言うと、
0. Label.textの1行には6文字しか入らない
0. ”ああああああああああああ”と入力すると”ああああああ ああああああ”と区切って表示される
0. ”ああああ”と入力すると、1行で”ああああ”と表示される
0. ”ああああああああ”と入力すると、”ああああ ああああ”と表示される

次に入力する文字列がその前に入力した文字列よりも文字数が大きければ動的に可変してくれますが、小さければ、なぜかそれ以降に長い文字列を入力しても、行の長さが固定されてしまい、動的に可変されなくなるのです。

過去のコードで何か問題があれば、ご指摘願います。

※追記
イメージ説明

※追記2
イメージ説明イメージ説明

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 @IBOutlet weak var label: UILabel! 6 @IBOutlet weak var textField: UITextField! 7 8 @IBAction func button(_ sender: UIButton) { 9 label.text = textField.text! 10 label.font = UIFont(name: "HiraKakuProN-W3", size: 18) 11 label.numberOfLines = 0 12 label.lineBreakMode = .byCharWrapping 13 // label.textAlignment = .center 14 label.sizeToFit() 15 } 16 17 @IBAction func button1(_ sender: Any) { 18 label.text = "1000" 19 label.font = UIFont(name: "HiraKakuProN-W3", size: 18) 20 label.numberOfLines = 0 21 label.lineBreakMode = .byCharWrapping 22// label.textAlignment = .center 23 label.sizeToFit() 24 } 25 26 @IBAction func button2(_ sender: Any) { 27 label.text = "10000000000000000" 28 label.font = UIFont(name: "HiraKakuProN-W3", size: 18) 29 label.numberOfLines = 0 30 label.lineBreakMode = .byCharWrapping 31// label.textAlignment = .center 32 label.sizeToFit() 33 } 34 35 @IBAction func button3(_ sender: Any) { 36 label.text = "gh;lajl;kajklsdfjlgbalgjaghojg;jlahgawjg;lakwgdbgkasglasbgaewjgw;aegjawelkgbawegdghsdmgbasjgasljfasfnsdlkfndsafmalsf" 37 label.font = UIFont(name: "HiraKakuProN-W3", size: 18) 38 label.numberOfLines = 0 39 label.lineBreakMode = .byCharWrapping 40// label.textAlignment = .center 41 label.sizeToFit() 42 } 43 44} 45

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

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

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

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

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

fuzzball

2018/10/25 05:41

複数行ラベルの場合、幅の指定は必須ですよ。
nekokichi

2018/10/25 06:02

幅を設定したら、可変されるようになりました。ですが、Labelがなぜか上部の方に表示されてしまいます。StoryBoardではなく、CGRectを使ったコードでLabelを生成しないといけないのでしょうか?
nekokichi

2018/10/25 06:02

※追記の画像です
fuzzball

2018/10/25 06:04

制約は付けていますか?コードの場合は位置を指定するのにCGRectを使ってframeを指定しますが、Storyboardの場合は制約(Constraint)を使って位置を指定します。
nekokichi

2018/10/25 06:15

制約を付けたら固定されました!! しかし、ボタンを2回押さないと、全文が表示されません。
nekokichi

2018/10/25 06:16

※追記2の画像です
fuzzball

2018/10/25 06:21

次々と質問内容を替えないで下さい。別の問題が発生した場合は新しい質問を立てて下さい。(この質問はきちんとクローズしておいて下さい)
guest

回答1

0

自己解決

AutoLayoutとWidthを設定した

投稿2018/10/25 06:22

nekokichi

総合スコア54

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問