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

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

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

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

Q&A

解決済

1回答

2490閲覧

Swift 改行されたラベルの行数を調べる方法

torkia

総合スコア24

Swift

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

0グッド

0クリップ

投稿2018/01/29 14:37

Swift3にて、UILabelで、複数のラベルのうち、文字列が多くて表示されないときは自動で改行させた場合に、改行されたラベルを取得する方法が知りたいです。

その改行された行が2行なのか、3行なのかなども分かれば嬉しいです。

宜しくお願い致します。

<やってみたこと>
下記のサンプルコードだと、文字数characters.countで判定していますが、
テキスト内に半角文字や記号などがランダムに含まれる場合は設定している文字数以上でも1行で表示できてしまう場合があります。
改行されたラベルを特定し、行数に応じて高さなどの変更ができればと思っています。

■ サンプルコード Swift3 xcode8

Swift3

1 var labels = [UILabel]() 2 for index in 0..<31 { 3 let label = UILabel() 4 label.font = UIFont.systemFont(ofSize: 12) 5 label.backgroundColor = rgbaPaleGray 6 label.frame = CGRect(x: 40, y: 100 + (index * 30), width: 315, height: 30) 7 label.numberOfLines = 0 8 labels.append(label) 9 scrollView.addSubview(label) 10 } 11 12 var maxY: CGFloat = 100 13 for c in labels { 14 c.frame.origin.y = maxY 15 if c.text?.characters.count > 25 { 16 c.frame.size.height += 20 17 c.frame = CGRect(x: 40, y: maxY, width: 315, height: c.frame.size.height) 18 } 19 maxY = c.frame.maxY 20 } 21

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

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

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

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

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

guest

回答1

0

ベストアンサー

sizeToFit()で高さを自動的に変更した後、ラベルの高さとフォントの高さから行数を求めます。
画面に表示して確認していないので、何かおかしかった突っ込んで下さい。

swift

1let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 0)) //高さは仮 2label.numberOfLines = 0 3label.text = "ほげほげほげほげほげほげほげ" 4 5//デフォルトフォント(17pt) 6label.sizeToFit() 7print("height =", label.frame.height) 8print("lineHeight =", label.font.lineHeight) 9print("lines =", Int(label.frame.height / label.font.lineHeight)) 10//=> height = 61.0 11//=> lineHeight = 20.287109375 12//=> lines = 3 13 14//フォントを変更 (30pt) 15label.font = UIFont.systemFont(ofSize: 30) 16label.sizeToFit() 17print("height =", label.frame.height) 18print("lineHeight =", label.font.lineHeight) 19print("lines =", Int(label.frame.height / label.font.lineHeight)) 20//=> height = 179.333333333333 21//=> lineHeight = 35.80078125 22//=> lines = 5

投稿2018/01/30 00:48

fuzzball

総合スコア16731

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

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

miyabi_takatsuk

2018/01/30 09:20

sizeToFit()、なまら便利ですよね。 いい時代になったもんだ。
torkia

2018/01/30 13:43

ご回答ありがとうございます。 表示行数を直接問えるプロパティなどはないのですね。 >高さを自動的に変更した後、ラベルの高さとフォントの高さから行数を求めます でやり方を考えてみます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問