前提
UILabelを可変にさせるため、
label ← stackView ← scrollView + Button ← View
という配置でUIを生成しています。各パーツは正常にレイアウトされていることは確認できているのですが、肝心のUILabelが全くスクロールしません。色々と試してみたのですが、どうしても解決できないのでご教授願いたいです。よろしくお願いいたします。
該当のソースコード
Swift
var baseView: UIView! var scrollView: UIScrollView! var flag: Bool! var detailBackButton: UIButton! var detailLabel = UILabel() var stackView: UIStackView! override func viewDidLoad() { super.viewDidLoad() //baseViewの追加・レイアウト baseView = UIView() baseView.frame = CGRect(x: self.view.frame.size.width * 0.1,y: self.view.frame.size.height * 0.1,width: self.view.frame.width * 0.8, height: self.view.frame.height * 0.8) baseView.isHidden = true self.view.addSubview(baseView) //detailBackButtonの追加とレイアウト detailBackButton = UIButton() baseView.addSubview(detailBackButton) detailBackButton.frame = CGRect(x: baseView.frame.size.width * 0.125, y: baseView.frame.size.height * 0.875, width: baseView.frame.size.width * 0.75, height: self.view.frame.height * 0.0625) detailBackButton.backgroundColor = .blue detailBackButton.layer.cornerRadius = 20.0 detailBackButton.setTitle("戻る", for: .normal) detailBackButton.setTitleColor(.white, for: .normal) detailBackButton.isHidden = true detailBackButton.addTarget(self, action: #selector(buttonTapped(sender:)), for: .touchUpInside) //scrollViewの追加とレイアウト scrollView = UIScrollView() scrollView.translatesAutoresizingMaskIntoConstraints = false baseView.addSubview(scrollView) scrollView.leadingAnchor.constraint(equalTo: baseView.leadingAnchor, constant: (baseView.frame.size.width * 0.05)).isActive = true scrollView.topAnchor.constraint(equalTo: baseView.topAnchor, constant: (baseView.frame.size.height * 0.05)).isActive = true scrollView.bottomAnchor.constraint(equalTo: baseView.bottomAnchor, constant: -(baseView.frame.size.height * 0.15)).isActive = true scrollView.trailingAnchor.constraint(equalTo: baseView.trailingAnchor, constant: -(baseView.frame.size.width * 0.05)).isActive = true scrollView.isHidden = true //stackViewの追加とレイアウト stackView = UIStackView() stackView.translatesAutoresizingMaskIntoConstraints = false scrollView.addSubview(stackView) stackView.leadingAnchor.constraint(equalTo: baseView.leadingAnchor, constant: (baseView.frame.size.width * 0.05)).isActive = true stackView.topAnchor.constraint(equalTo: baseView.topAnchor, constant: (baseView.frame.size.height * 0.05)).isActive = true stackView.bottomAnchor.constraint(equalTo: baseView.bottomAnchor, constant: -(baseView.frame.size.height * 0.15)).isActive = true stackView.trailingAnchor.constraint(equalTo: baseView.trailingAnchor, constant: -(baseView.frame.size.width * 0.05)).isActive = true stackView.isHidden = true //detailLabelの追加とレイアウト detailLabel = UILabel() detailLabel.translatesAutoresizingMaskIntoConstraints = false stackView.addArrangedSubview(detailLabel) detailLabel.text = "長文テキスト(略)" detailLabel.font = UIFont.systemFont(ofSize: 18) detailLabel.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true detailLabel.numberOfLines = 0 detailLabel.sizeToFit() detailLabel.isHidden = true //stackViewに合わせてscrollViewの大きさが変わる→スクロールできるようになる scrollView.contentSize = CGSize(width: scrollView.frame.size.width, height: stackView.frame.size.height) }
試したこと
print関数でそれぞれのUIの高さをデバッグさせた所
ScrollViewのheightは573.5(正常)
ScrollViewのcontentSize.heightは0
detailLabelのheightは1031.5(正常)
stackViewのheightは573.5(正常)となりました。
scrollViewのcontentSizeの値はviewDidLoadの最後の一文で設定されているのですがうまくいっていないようです。
Swift
scrollView.contentSize = CGSize(width: scrollView.frame.size.width, height: stackView.frame.size.height)
上記のwidth・heightにそれぞれ数字を入れるとスクロールされますが、ラベルは可変ではありません。
どなたかご教授いただけますと幸いです。よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Swift5

0 コメント