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

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

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

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

Xcode

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

Swift

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

Q&A

解決済

1回答

177閲覧

swift スクロールビュー

Larry

総合スコア28

iOS

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/04/03 12:19

画面をタップする度にスクロールビュー上にラベルを表示したい。

発生している問題・エラーメッセージ

画面をタップする度にラベルが表示されるプログラムを組んだのですが、そのラベルをスクロールできるようにしたいです。 以下のコードでは最後に表示されたラベルだけがスクロールしてしまいます。 理想はラインのようなそれまでに表示されているラベル全てがスクロールされる感じです。 ご教授いただければ幸いです。よろしくお願いします

該当のソースコード

import UIKit let leibun = [(title: "てすと", items: ["あいあいあいあいああいあいあい", "うえうえうえうえうえうえうえうえうえうえうえうえうえうえうえうええうえうえ","えおえおえおえおえおえおえおえおえおえおええおえおえおえお","おあおあおあおあおあおあおあおあおあおあ","お","かかかかかかかかかかかかかかかかかかかかかかかかかかか","けけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけけ",]), ] class ViewController: UIViewController, UIScrollViewDelegate { override func viewDidLoad() { super.viewDidLoad() } var i = 0 var j = 0 var textLabelsize = 0 var textLabelyPoint = 50 @IBAction func tapScreen(_ sender: Any) { let textLabel = UILabel() let backLabel = UILabel() let scrollView = UIScrollView() if i == leibun[j].items.count { return; }; //右側 if i%2 == 0 { textLabel.font = textLabel.font.withSize(18) textLabel.text = "(leibun[j].items[i])" textLabel.textColor = UIColor.black textLabel.sizeToFit() //設定値超えたらラベルを制御(仮) textLabelsize = Int(textLabel.frame.width) //print("突入前(labelsize)") if textLabelsize >= 300 { textLabel.numberOfLines = 0 textLabel.lineBreakMode = .byCharWrapping textLabel.frame.size.width = 300 textLabel.sizeToFit() } else { textLabel.sizeToFit() } //座標 textLabel.frame.origin.x = CGFloat(view.frame.origin.x + view.frame.size.width-textLabel.frame.width-30) textLabel.frame.origin.y = CGFloat(textLabelyPoint) textLabel.textAlignment = NSTextAlignment.left backLabel.backgroundColor = UIColor.yellow backLabel.clipsToBounds = true backLabel.layer.cornerRadius = 15 backLabel.layer.borderWidth = 1 backLabel.layer.borderColor = UIColor.black.cgColor backLabel.frame.size.width = textLabel.frame.size.width + 26 backLabel.frame.size.height = textLabel.frame.size.height + 14 backLabel.frame.origin.x = textLabel.frame.origin.x - 13 backLabel.frame.origin.y = textLabel.frame.origin.y - 7 self.view.addSubview(backLabel) self.view.addSubview(textLabel) //左側 }; if i%2 == 1 { textLabel.font = textLabel.font.withSize(18) textLabel.text = "(leibun[j].items[i])" textLabel.textColor = UIColor.white textLabel.sizeToFit() //設定値超えたらラベルを制御(仮) textLabelsize = Int(textLabel.frame.width) if textLabelsize >= 300 { textLabel.numberOfLines = 0 textLabel.lineBreakMode = .byCharWrapping textLabel.frame.size.width = 300 textLabel.sizeToFit() } else { textLabel.sizeToFit() } //座標 textLabel.frame.origin.x = CGFloat(30) textLabel.frame.origin.y = CGFloat(textLabelyPoint) textLabel.textAlignment = NSTextAlignment.left backLabel.backgroundColor = UIColor.gray backLabel.clipsToBounds = true backLabel.layer.cornerRadius = 15 backLabel.layer.borderWidth = 1 backLabel.layer.borderColor = UIColor.black.cgColor backLabel.frame.size.width = textLabel.frame.size.width + 26 backLabel.frame.size.height = textLabel.frame.size.height + 14 backLabel.frame.origin.x = textLabel.frame.origin.x - 13 backLabel.frame.origin.y = textLabel.frame.origin.y - 7 view.addSubview(backLabel) view.addSubview(textLabel) }; scrollView.frame = self.view.frame scrollView.contentSize = CGSize(width:0,height:1000) scrollView.delegate = self scrollView.addSubview(backLabel) scrollView.addSubview(textLabel) self.view.addSubview(scrollView) //ひとつのラベルが表示される度に i = i + 1 print(i) textLabelyPoint = Int(textLabel.frame.height) + Int(textLabel.frame.origin.y) + 30 } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

タップするたびに新しいスクロールビューを生成しちゃダメですね。
スクロールビューは一個だけ。

タップ時は、ラベルを生成してスクロールビューに追加。
スクロールビューのcontentSize(スクロールビューの中身のサイズ)を「ラベルの高さ+マージン」だけ増やします。

投稿2019/04/04 00:31

fuzzball

総合スコア16731

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

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

Larry

2019/04/05 10:22

回答ありがとうございます!無事できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問