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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

解決済

2回答

3812閲覧

UILabelがどうやっても複数行に出来ない(ならない)

nekogrammer

総合スコア33

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

0クリップ

投稿2021/09/18 06:58

##やりたいこと
UILabelの複数行表示

##起こっている問題
UILabelで文字が途中で三点リーダになってしまい、1行しか表示されない
イメージ説明
問題のラベルはわかりやすく赤色の背景色にしています。

##トライしたこと
StoryBoardにて該当のUILabelのLinesに0を指定
イメージ説明

ViewController.swiftの方でも念のためnumberOfLinesに0を指定。
さらにLabelの高さも余裕を持って500に設定。
tips_detailは問題のUILabelの名称です。

tips_detail.frame.size.height = 500
tips_detail.numberOfLines = 0 // 0でも10に設定しても1行しか表示されない
tips_detail.backgroundColor = .red

調べたこと

どのサイトを調べても、Linesを0に設定すれば難なく複数行に表示できているようです。
sizeToFit()なども試してみましたがダメでした。

不可解なこと

tips_detail.frame.size.height = 500
と指定しても、赤背景から分かるようにそもそも高さが変わっていないです。
全く意味が分からないので、どなたか助けていただけませんでしょうか。

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

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

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

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

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

guest

回答2

0

AutoLayout で組んでいるんですよね?

でしたら、ラベルの高さも制約として追加することになります。具体的には、オブジェクトツリーのラベルの上で右ドラッグし、そのラベルの上で離すと高さや幅といった関係オブジェクトのないラベル自身への制約を追加できます。

イメージ説明

イメージ説明

なお、高さの制約を正しく適用するには縦の位置(.Top, .Bottom など)の決定も不可欠です。

十分な高さが確保されると、複数行で表示されるようになると思います。

投稿2021/09/18 07:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nekogrammer

2021/09/18 07:21

回答ありがとうございます。 この問題でずっと1時間くらい悩まされていて投稿したのですが、 投稿した直後に自己解決してしまいました。 画像まで付けていただいてご丁寧に回答して頂いたのに、 自己解決の投稿をしてしまい申し訳ございませんでした。 また、AutoLayoutについての記述がなくて失礼いたしました。 AutoLayoutは使っておらず、プログラムのコードの中でCGRectで座標やサイズを 指定しています。 でも、おっしゃる通りで、AutoLayoutは使っていないのですが、 viewWillLayoutSubviewsにて自分でレイアウト制約をコードで記述しており、 viewDidLoadでUILabelの初期表示を設定したのにも関わらず、 viewWillLayoutSubviewsでその設定が上書きされていたのが理由のようでした。 (メソッド?が実行される順番をあまり分かっていなかったです。) 先に自己解決投稿をしたのでベストアンサーに出来なくて大変恐縮です。 高評価のボタン押しておきます。
退会済みユーザー

退会済みユーザー

2021/09/18 08:12

お気になさらず! コードでのレイアウトの基本は `UIView` のカスタムクラスの `layoutSubviews` をオーバーライドして、そのビュー自身の大きさを基準に直接のサブビューを配置するコードを書き、サブビューはまた自身の `layoutSubviews` で自身の直接の子のみの配置を更新し〜、と伝播することなので、そのへんを整理して臨むと不可解なミスが減るかもです。
guest

0

自己解決

##自己解決方法
viewDidLoad()で記述していたプログラムを、
viewWillLayoutSubviews()に移動させたら無事複数行で
表示させることができました。

投稿2021/09/18 07:13

nekogrammer

総合スコア33

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問