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

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

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

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

Q&A

解決済

2回答

1103閲覧

Swift ラベルの座標を動的にずらす方法

torkia

総合スコア24

Swift

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

0グッド

0クリップ

投稿2018/01/23 04:02

編集2018/01/25 07:48

Swift3にて、UILabelを縦に並べて表示させた場合に、文字列が多いなどで改行させてラベルの高さを動的に可変させた場合に、それ以降に並んだラベルの座標位置を自動的にずらす方法を模索しているのですが、苦戦しております。

UILabelはコードで作成しているので、StoryboardのAutoLayoutではなく、コード記述でY座標をずらせる方法を教えて頂ければ助かります。

ラベルはspaceなしでq1Label~q11Labelの順番で上から縦に並べてあります。
表示させるテキストはcsvファイルから取得し、ランダムになるものとします。
例えば、q9Labelが文字列が多くて改行させて+20ラベルのheightを高くした場合、q10Label, q11Labelの表示位置(Y座標)を自動的に変えさせたいです。

ご教授、宜しくお願い致します。

■ サンプルコード Swift3 xcode8

Swift3

1import UIKit 2 3class FirstViewController: UIViewController { 4 5 let q1Label = UILabel() 6 let q2Label = UILabel() 7 let q3Label = UILabel() 8 let q4Label = UILabel() 9 let q5Label = UILabel() 10 let q6Label = UILabel() 11 let q7Label = UILabel() 12 let q8Label = UILabel() 13 let q9Label = UILabel() 14 let q10Label = UILabel() 15 let q11Label = UILabel() 16 17 override func viewDidLoad() { 18 super.viewDidLoad() 19 20 // CSVファイルを読み込む 21 let csvArray = loadCSV("test") 22 23 //csvArrayから取り出した問題を格納する配列qArray 24 var qArray:[String] = [] 25 26 //csvArrayの行を取得 27 qArray = csvArray[2].components(separatedBy: ";") 28 29 // q1Label作成 30 q1Label.text = qArray[5] 31 q1Label.frame = CGRect(x: 20, y: 60, width: 335, height: 30) 32 q1Label.textColor = UIColor.black 33 q1Label.font = UIFont.systemFont(ofSize: 12) 34 q1Label.backgroundColor = .gray 35 view.addSubview(q1Label) 36 37 // q2Label作成 38 q2Label.text = qArray[7] 39 q2Label.frame = CGRect(x: 20, y: q1Label.frame.maxY, width: 335, height: 30) 40 q2Label.textColor = UIColor.black 41 q2Label.font = UIFont.systemFont(ofSize: 12) 42 q2Label.backgroundColor = .gray 43 view.addSubview(q2Label) 44 45 // q3Label作成 46 q3Label.text = qArray[9] 47 q3Label.frame = CGRect(x: 20, y: q2Label.frame.maxY, width: 335, height: 30) 48 q3Label.textColor = UIColor.black 49 q3Label.font = UIFont.systemFont(ofSize: 12) 50 q3Label.backgroundColor = .gray 51 view.addSubview(q3Label) 52 53 // q4Label作成 54 q4Label.text = qArray[11] 55 q4Label.frame = CGRect(x: 20, y: q3Label.frame.maxY, width: 335, height: 30) 56 q4Label.textColor = UIColor.black 57 q4Label.font = UIFont.systemFont(ofSize: 12) 58 q4Label.backgroundColor = .gray 59 view.addSubview(q4Label) 60 61 // q5Label作成 62 q5Label.text = qArray[13] 63 q5Label.frame = CGRect(x: 20, y: q4Label.frame.maxY, width: 335, height: 30) 64 q5Label.textColor = UIColor.black 65 q5Label.font = UIFont.systemFont(ofSize: 12) 66 q5Label.backgroundColor = .gray 67 view.addSubview(q5Label) 68 69 // q6Label作成 70 q6Label.text = qArray[15] 71 q6Label.frame = CGRect(x: 20, y: q5Label.frame.maxY, width: 335, height: 30) 72 q6Label.textColor = UIColor.black 73 q6Label.font = UIFont.systemFont(ofSize: 12) 74 q6Label.backgroundColor = .gray 75 view.addSubview(q6Label) 76 77 /// q7Label作成 78 q7Label.text = qArray[17] 79 q7Label.frame = CGRect(x: 20, y: q6Label.frame.maxY, width: 335, height: 30) 80 q7Label.textColor = UIColor.black 81 q7Label.font = UIFont.systemFont(ofSize: 12) 82 q7Label.backgroundColor = .gray 83 view.addSubview(q7Label) 84 85 // q8Label作成 86 q8Label.text = qArray[19] 87 q8Label.frame = CGRect(x: 20, y: q7Label.frame.maxY, width: 335, height: 30) 88 q8Label.textColor = UIColor.black 89 q8Label.font = UIFont.systemFont(ofSize: 12) 90 q8Label.backgroundColor = .gray 91 view.addSubview(q8Label) 92 93 // q9Label作成 94 q9Label.text = qArray[21] 95 q9Label.frame = CGRect(x: 20, y: q8Label.frame.maxY, width: 335, height: 30) 96 q9Label.textColor = UIColor.black 97 q9Label.font = UIFont.systemFont(ofSize: 12) 98 q9Label.backgroundColor = .gray 99 view.addSubview(q9Label) 100 print("q9Label.frame.maxY: (q9Label.frame.maxY)") 101 102 103 // q10Label作成 104 q10Label.text = qArray[23] 105 q10Label.frame = CGRect(x: 20, y: q9Label.frame.maxY, width: 335, height: 30) 106 q10Label.textColor = UIColor.black 107 q10Label.font = UIFont.systemFont(ofSize: 12) 108 q10Label.backgroundColor = .gray 109 view.addSubview(q10Label) 110 print("q9Label.frame.maxY: (q9Label.frame.maxY)") 111 112 // q11Label作成 113 q11Label.text = qArray[25] 114 q11Label.frame = CGRect(x: 20, y: q10Label.frame.maxY, width: 335, height: 30) 115 q11Label.textColor = UIColor.black 116 q11Label.font = UIFont.systemFont(ofSize: 12) 117 q11Label.backgroundColor = .gray 118 view.addSubview(q11Label) 119 120 121 122 // UILabelを配列に入れる 123 var qlabels = [UILabel]() 124 125 // 配列labelsに追加するラベル 126 qlabels.append(q1Label) 127 qlabels.append(q2Label) 128 qlabels.append(q3Label) 129 qlabels.append(q4Label) 130 qlabels.append(q5Label) 131 qlabels.append(q6Label) 132 qlabels.append(q7Label) 133 qlabels.append(q8Label) 134 qlabels.append(q9Label) 135 qlabels.append(q10Label) 136 qlabels.append(q11Label) 137 138 139 // ■が含まれてる文字列がある場合は色を変える 140 for i in qlabels { 141 if (i.text?.contains("■"))! { 142 i.backgroundColor = .cyan 143 } 144 } 145 146 // 文字数が30より多い場合は改行させて、ラベルのheightを高くする 147 for c in qlabels { 148 if (c.text?.characters.count)! > 30 { 149 c.numberOfLines = 0 150 c.frame.size.height += 20 151 c.frame = CGRect(x: 20, y: c.frame.origin.y, width: 335, height: c.frame.size.height) 152 } 153 } 154 } 155 156 (略) 157} 158

■ 回答を参考に修正したコード

Swift3

1 // 文字数が30より多い場合は改行させて、ラベルのheightを高くする 2 3 // offsetYを利用して座標をずらす方法 4    var offsetY: CGFloat = 0 5 for c in qlabels { 6 c.frame.origin.y += offsetY 7 if (c.text?.characters.count)! > 30 { 8 c.numberOfLines = 0 9 c.frame.size.height += 20 10 offsetY += 20 11 c.frame = CGRect(x: 20, y: c.frame.origin.y, width: 335, height: c.frame.size.height) 12 } 13 } 14 15 16 // maxYを利用して座標をずらす方法 17 var maxY: CGFloat = 60 18 for c in qlabels { 19 c.frame.origin.y = maxY 20 if (c.text?.characters.count)! > 30 { 21 c.numberOfLines = 0 22 c.frame.size.height += 20 23 c.frame = CGRect(x: 20, y: maxY, width: 335, height: c.frame.size.height) 24 } 25 maxY = c.frame.maxY 26 } 27 28 29 // 一つ前のラベル qlabels[c-1] を利用して座標をずらす方法 30 for c in 0..<qlabels.count { 31      qlabels[0].frame.origin.y = 60 32 if c > 0 { 33 qlabels[c].frame.origin.y = qlabels[c-1].frame.maxY 34 } 35 if (qlabels[c].text?.characters.count)! > 30 { 36 qlabels[c].numberOfLines = 0 37 qlabels[c].frame.size.height += 20 38 qlabels[c].frame = CGRect(x: 20, y: qlabels[c-1].frame.maxY, width: 335, height: qlabels[c].frame.size.height) 39 } 40 } 41 42

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

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

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

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

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

guest

回答2

0

変わり種ですが、直前のラベル位置から制約を付ける方法。
sizeThatFits()で高さを算出しつつ、VFLで位置決めをしてます。

swift

1 // q1Label作成 2 q1Label.text = qArray[5] 3 //q1Label.frame = CGRect(x: 20, y: 60, width: 335, height: 30) 4 q1Label.textColor = UIColor.black 5 q1Label.font = UIFont.systemFont(ofSize: 12) 6 q1Label.backgroundColor = .gray 7 view.addSubview(q1Label) 8 9       10      //(略) 11       12 13 // 文字数が30より多い場合は改行させて、ラベルのheightを高くする 14 var prev = qlabels[0] 15 for i in 0..<qlabels.count { 16 17 let objects = ["prev":prev,"next":qlabels[i]] 18 objects.forEach { $1.translatesAutoresizingMaskIntoConstraints = false } 19 20 qlabels[i].numberOfLines = 0 21 qlabels[i].lineBreakMode = .byCharWrapping 22 23 let rec = qlabels[i].sizeThatFits(CGSize(width:335,height:30)) 24 let tmp = ((qlabels[i].text?.count)! > 30) ? rec.height : 30 25 let height = "".appendingFormat("%.0f", tmp) 26 27 if i == 0 { 28 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:[prev(==335)]", options: .alignAllLeft, metrics: nil, views: objects)) 29 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[prev(==(height))]", options: .alignAllLeft, metrics: nil, views: objects)) 30 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-20-[prev]", options: .alignAllLeft, metrics: nil, views: objects)) 31 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-60-[prev]", options: .alignAllLeft, metrics: nil, views: objects)) 32 continue 33 } 34 35 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[prev]-20-[next]", options: .alignAllLeft, metrics: nil, views: objects)) 36 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:[next(==335)]", options: .alignAllLeft, metrics: nil, views: objects)) 37 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[next(==(height))]", options: .alignAllLeft, metrics: nil, views: objects)) 38 39 prev = qlabels[i] 40 } 41

実験
イメージ説明

追記:テストコード

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 let q1Label = UILabel() 6 let q2Label = UILabel() 7 let q3Label = UILabel() 8 let q4Label = UILabel() 9 let q5Label = UILabel() 10 let q6Label = UILabel() 11 let q7Label = UILabel() 12 let q8Label = UILabel() 13 let q9Label = UILabel() 14 let q10Label = UILabel() 15 let q11Label = UILabel() 16 17 override func viewDidLoad() { 18 super.viewDidLoad() 19 20 // CSVファイルを読み込む 21 //let csvArray = loadCSV("test") 22 23 //csvArrayから取り出した問題を格納する配列qArray 24 var qArray:[String] = [String](repeating: "a", count: 50) 25 26 //csvArrayの行を取得 27 //qArray = csvArray[2].components(separatedBy: ";") 28 29 // q1Label作成 30 q1Label.text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxxx" 31 //q1Label.frame = CGRect(x: 20, y: 60, width: 335, height: 30) 32 q1Label.textColor = UIColor.black 33 q1Label.font = UIFont.systemFont(ofSize: 12) 34 q1Label.backgroundColor = .gray 35 view.addSubview(q1Label) 36 37 // q2Label作成 38 q2Label.text = qArray[7] 39 //q2Label.frame = CGRect(x: 20, y: q1Label.frame.maxY, width: 335, height: 30) 40 q2Label.textColor = UIColor.black 41 q2Label.font = UIFont.systemFont(ofSize: 12) 42 q2Label.backgroundColor = .gray 43 view.addSubview(q2Label) 44 45 // q3Label作成 46 q3Label.text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxxx" 47 q3Label.frame = CGRect(x: 20, y: q2Label.frame.maxY, width: 335, height: 30) 48 q3Label.textColor = UIColor.black 49 q3Label.font = UIFont.systemFont(ofSize: 12) 50 q3Label.backgroundColor = .gray 51 view.addSubview(q3Label) 52 53 // q4Label作成 54 q4Label.text = qArray[11] 55 q4Label.frame = CGRect(x: 20, y: q3Label.frame.maxY, width: 335, height: 30) 56 q4Label.textColor = UIColor.black 57 q4Label.font = UIFont.systemFont(ofSize: 12) 58 q4Label.backgroundColor = .gray 59 view.addSubview(q4Label) 60 61 // q5Label作成 62 q5Label.text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxxx" 63 q5Label.frame = CGRect(x: 20, y: q4Label.frame.maxY, width: 335, height: 30) 64 q5Label.textColor = UIColor.black 65 q5Label.font = UIFont.systemFont(ofSize: 12) 66 q5Label.backgroundColor = .gray 67 view.addSubview(q5Label) 68 69 // q6Label作成 70 q6Label.text = qArray[15] 71 q6Label.frame = CGRect(x: 20, y: q5Label.frame.maxY, width: 335, height: 30) 72 q6Label.textColor = UIColor.black 73 q6Label.font = UIFont.systemFont(ofSize: 12) 74 q6Label.backgroundColor = .gray 75 view.addSubview(q6Label) 76 77 /// q7Label作成 78 q7Label.text = qArray[17] 79 q7Label.frame = CGRect(x: 20, y: q6Label.frame.maxY, width: 335, height: 30) 80 q7Label.textColor = UIColor.black 81 q7Label.font = UIFont.systemFont(ofSize: 12) 82 q7Label.backgroundColor = .gray 83 view.addSubview(q7Label) 84 85 // q8Label作成 86 q8Label.text = qArray[19] 87 q8Label.frame = CGRect(x: 20, y: q7Label.frame.maxY, width: 335, height: 30) 88 q8Label.textColor = UIColor.black 89 q8Label.font = UIFont.systemFont(ofSize: 12) 90 q8Label.backgroundColor = .gray 91 view.addSubview(q8Label) 92 93 // q9Label作成 94 q9Label.text = qArray[21] 95 q9Label.frame = CGRect(x: 20, y: q8Label.frame.maxY, width: 335, height: 30) 96 q9Label.textColor = UIColor.black 97 q9Label.font = UIFont.systemFont(ofSize: 12) 98 q9Label.backgroundColor = .gray 99 view.addSubview(q9Label) 100 print("q9Label.frame.maxY: (q9Label.frame.maxY)") 101 102 103 // q10Label作成 104 q10Label.text = qArray[23] 105 q10Label.frame = CGRect(x: 20, y: q9Label.frame.maxY, width: 335, height: 30) 106 q10Label.textColor = UIColor.black 107 q10Label.font = UIFont.systemFont(ofSize: 12) 108 q10Label.backgroundColor = .gray 109 view.addSubview(q10Label) 110 print("q9Label.frame.maxY: (q9Label.frame.maxY)") 111 112 // q11Label作成 113 q11Label.text = qArray[25] 114 q11Label.frame = CGRect(x: 20, y: q10Label.frame.maxY, width: 335, height: 30) 115 q11Label.textColor = UIColor.black 116 q11Label.font = UIFont.systemFont(ofSize: 12) 117 q11Label.backgroundColor = .gray 118 view.addSubview(q11Label) 119 120 121 122 // UILabelを配列に入れる 123 var qlabels = [UILabel]() 124 125 // 配列labelsに追加するラベル 126 qlabels.append(q1Label) 127 qlabels.append(q2Label) 128 qlabels.append(q3Label) 129 qlabels.append(q4Label) 130 qlabels.append(q5Label) 131 qlabels.append(q6Label) 132 qlabels.append(q7Label) 133 qlabels.append(q8Label) 134 qlabels.append(q9Label) 135 qlabels.append(q10Label) 136 qlabels.append(q11Label) 137 138 139 // ■が含まれてる文字列がある場合は色を変える 140 for i in qlabels { 141 if (i.text?.contains("■"))! { 142 i.backgroundColor = .cyan 143 } 144 } 145 146 // 文字数が30より多い場合は改行させて、ラベルのheightを高くする 147 var prev = qlabels[0] 148 for i in 0..<qlabels.count { 149 150 let objects = ["prev":prev,"next":qlabels[i]] 151 objects.forEach { $1.translatesAutoresizingMaskIntoConstraints = false } 152 153 qlabels[i].numberOfLines = 0 154 qlabels[i].lineBreakMode = .byCharWrapping 155 156 let rec = qlabels[i].sizeThatFits(CGSize(width:335,height:30)) 157 let tmp = ((qlabels[i].text?.count)! > 30) ? rec.height : 30 158 let height = "".appendingFormat("%.0f", tmp) 159 160 if i == 0 { 161 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:[prev(==335)]", options: .alignAllLeft, metrics: nil, views: objects)) 162 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[prev(==(height))]", options: .alignAllLeft, metrics: nil, views: objects)) 163 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-20-[prev]", options: .alignAllLeft, metrics: nil, views: objects)) 164 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-60-[prev]", options: .alignAllLeft, metrics: nil, views: objects)) 165 continue 166 } 167 168 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[prev]-20-[next]", options: .alignAllLeft, metrics: nil, views: objects)) 169 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:[next(==335)]", options: .alignAllLeft, metrics: nil, views: objects)) 170 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[next(==(height))]", options: .alignAllLeft, metrics: nil, views: objects)) 171 172 prev = qlabels[i] 173 } 174 } 175 176} 177

投稿2018/01/23 07:07

編集2018/01/23 12:16
fromageblanc

総合スコア2724

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

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

torkia

2018/01/23 11:33

ご回答ありがとうございます。 こちらの勉強不足で申し訳ないのですが、コードが難し過ぎて分からないので質問させて頂きます。 記述して頂いたコードをコピペすると実験図のようにはならなかったのですが(文字列の多いラベルの高さが高くなっていないなど)どこを直せばいいか教えて頂ければ助かります。
fromageblanc

2018/01/23 12:22 編集

テスト用コードを追記しました。 私の環境はSwift4のため、text?.characters.count を text?.countにしてます。
torkia

2018/01/23 13:03 編集

追記コードありがとうございます。 別のviewControllerファイルで追記コードだけを試すと実験図のようにちゃんとなるのですが、 「// 文字数が30より多い場合は改行させて、ラベルのheightを高くする」 以降のコードを私のコードの続きにコピペすると実験図のようにラベル高が変更されません。 > text?.characters.count を text?.countにしてます。 は修正して実行してます。 >"V:[prev]-20-[next]" のところの20を0に変更してスペースを空けず縦に並べて表示させてます。 文字列が多い場合の高さ変更はどの部分のコードで指示を与えているのかが分かりませんでした。 csvから読み込んだ文字列の多いラベルの高さを変更させるにはどこを変更すればよろしいでしょうか? csvから読み込むテキストは改行しても2行ぐらいの文字数なのでFont12の場合だとデフォルトの高さ30でもおさまるのですが、それの違いでしょうか?デフォルトで設定してある高さに+20したいのですが・・。
fromageblanc

2018/01/23 13:03

1番目のラベル高も可変になりませんか?
fromageblanc

2018/01/23 13:05

あと文字カウントが正常かどうかも確認してください。
torkia

2018/01/23 13:13

ご回答ありがとうございます。 let tmp = ((qlabels[i].text?.count)! > 30) ? rec.height : 30 の rec.height : 30 のところを あえて小さく12にして試したところ 文字数の多いラベルは改行されてラベル高さも文字が収まる高さに広がってました。 できれば、rec.height: 30のままで、文字列の多いラベルのみ高さを広げてそれ以降のラベルに反映させたいのですが、できますでしょうか?
fromageblanc

2018/01/23 13:23

それはcsvに30文字超えるデータがいないだけでは?
torkia

2018/01/23 13:32

度々ありがとうございます。 このサンプルコードで呼んでいるのにはq9Labelとq11Labelに30文字以上あって、ちゃんと改行はされてます。ただラベルの中に文字が収まっているので高くならないのかと思います。文字が詰まってるので余白をとりたくて+20にして可変させたかったのですが・・・。
torkia

2018/01/24 13:01

なんとかやりたいことができました。 let rec~, let tmp~, let height~ の3行分を以下のコードに変更 qlabels[i].frame.size = CGSize(width: 335, height: 30) let rec = qlabels[i].frame.size var tmp = rec.height print("rec.height: (rec.height)") if ((qlabels[i].text?.characters.count)! > 30) { tmp += 20 } let height = "".appendingFormat("%.0f", tmp) これで高さが+20されました。 お手数をおかけ致しました。ありがとうございました。
guest

0

ベストアンサー

今のコードを流用すれば、

swift

1var offsetY: CGFloat = 0 //※ 2for c in qlabels { 3 c.frame.origin.y += offsetY //※今までにズレた分を足す 4 if (c.text?.characters.count)! > 30 { 5 c.numberOfLines = 0 6 c.frame.size.height += 20 7 offsetY += 20 //※ 8 c.frame = CGRect(x: 20, y: c.frame.origin.y, width: 335, height: c.frame.size.height) 9 } 10}

一つ前のラベルのmaxYを使う方がシンプルだと思いますけどね。

投稿2018/01/23 04:27

編集2018/01/23 05:00
fuzzball

総合スコア16731

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

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

torkia

2018/01/23 05:09

ご回答ありがとうございます。 c.frame.size.height += offsetY //※今までにズレた分を足す を c.frame.origin.y += offsetY //※今までにズレた分を足す に変えたらできました。コピペミスですよね?ありがとうございました。 >一つ前のラベルのmaxYを使う方がシンプルだと思いますけどね。 どうやったらその方法でやれるんでしょうか? for-in文、if文の中での配列の中に入れたラベルの1つ前のラベルの取得方法がわかりませんでした。 そのシンプルな方法などを、教えて頂ければ嬉しいです。
fuzzball

2018/01/23 05:36

offsetYの代わりにmaxYを用意して、 ・初期値 qlabels[0].frame.origin.y ・座標セット c.frame = CGRect(x: 20, y: maxY, ...(以下略) ・maxY更新 maxY = c.frame.maxY あるいは、普通(?)のforループを使って添字で配列にアクセスする。 for i in 0..<qlabels.count { //qlabels[i-1] が一つ前のラベル }
torkia

2018/01/23 11:18 編集

ご回答ありがとうございます。 教えて頂いたことを参考にコード記述をしても適切なコードが記述できず、エラーがでてしまいます。 > offsetYの代わりにmaxYを用意して var maxY: CGFloat for c in qlabels { qlabels[0].frame.origin.y = 60 c.frame.origin.y = maxY if (c.text?.characters.count)! > 30 { c.numberOfLines = 0 c.frame.size.height += 20 c.frame = CGRect(x: 20, y: maxY, width: 335, height: c.frame.size.height) maxY = c.frame.maxY } } > あるいは、普通(?)のforループを使って添字で配列にアクセスする。 var maxY: CGFloat for c in 0..<qlabels.count { if qlabels[c] == q1Label { qlabels[c].frame.origin.y = 60 } qlabels[c].frame.origin.y = maxY if (qlabels[c] .text?.characters.count)! > 30 { qlabels[c].numberOfLines = 0 qlabels[c].frame.size.height += 20 qlabels[c].frame = CGRect(x: 20, y: qlabels[c].frame.origin.y, width: 335, height: qlabels[c].frame.size.height) maxY = qlabels[c-1].frame.maxY } } お時間ありましたら、修正箇所を教えて頂けると助かります。
fuzzball

2018/01/23 11:39

上の方 var maxY: CGFloat = 60 //初期値 qlabels[0].frame.origin.y = 60 //この行は不要 これでどうでしょう?
torkia

2018/01/23 11:50

ご回答ありがとうございます。 ダメでした。 文字列の多いラベルのみ、y座標60のところから並んで表示されるようになってしまいます。
fuzzball

2018/01/23 13:00

あー、 maxY = c.frame.maxY は if文の外に出して下さい。 まだダメなら現状のコードを全て書いて下さい。(質問の方へ) 少しは自分でも考えてくださいね。
torkia

2018/01/23 13:25

お手数をおかけ致しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問