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

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

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

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

Swift

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

Q&A

解決済

1回答

1366閲覧

scrollViewを正確にスクロールさせたい

meia

総合スコア26

Xcode

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

Swift

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

0グッド

0クリップ

投稿2017/01/14 15:56

編集2017/01/16 08:43

###前提・実現したいこと
xcode8で作業しています

スクロールビューに動的なテキストビューとイメージビューを入れて使っているのですが、スクロールスクロールしたりしなかったりするので、原因が何なのかを見ていただきたいです。

イメージ説明
イメージ説明

具体的に述べますと、最初にviewを開いたときはスクロールしないのに、UIButtonでテキストビューやイメージビューの内容を変更するとスクロールできるようになります。
また、さらにUIButtonで内容を変更してConstraintsが短くなっても、余分に長くスクロール可能な状態になったままで、うまく扱えておりません

###該当のソースコード

override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() testtext.sizeToFit() textheight.constant = testtext.contentSize.height let totalheight: CGFloat = testtext.contentSize.height + imgview.frame.height + 10 myscroll.contentSize.height = totalheight print(myscroll.contentSize.height) } @IBAction func next(_ sender: AnyObject) { \\このあたりにテキストと画像を変更するコードが入っています、場合によって画像はnilになることもあります print(myscroll.contentSize.height) }

###試したこと
自分ではviewDidLayoutSubviews()の中身に原因があるのではないかと考えたのですが、いろいろいじって見てもわかりませんでした。(あまり綺麗ではないので省略しましたが、@IBAction func next(_ sender: AnyObject) の中にはConstraintsを操作するようなものは入っていません)

ちなみにmyscroll.contentSize.heightを1000に固定して見ても、最初はスクロールせず、内容を変えたら、スクロールできるようになるというのは変わりませんでした。

もし何か足りない情報があれば、追加します。
どうかご教授お願いしますm(_ _)m

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

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

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

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

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

fuzzball

2017/01/16 04:51

ScrollView、TextView、ImageViewの制約を全て書いて下さい。
meia

2017/01/16 08:53

Constraintsの画像を追加させていただきました! 質問を追加した状態からストーリーボードをいじって見たところ、func nextを押した後はスクロールが正常に働くようになりました。しかし、現在は逆に最初にビューを開いたときだけ余分に(画像があるときは不足して)スクロールするという状態です。(コードの方は画像がないときにImageViewのCGRectのHeightを0にするという以外は変わっておりません)
meia

2017/01/16 14:38

bottom = view.bottom のみを削除したところ、最初にビューを開いときのみスクロールしなくなり、内容を変更すると正常にスクロールするという状態になりました。どうやら最初にビューを開いたときだけ、Storyboardの長さが優先されてしまっているようなのですが、どうすれば上手くいくでしょうか?
fuzzball

2017/01/17 00:13

こちらの見えないところでコードなどを修正し、結果だけ報告されてもどうしようもないのですが。
meia

2017/01/17 01:25

こちらで勝手に関係ないと判断してしまっていました。すいません・・・
fuzzball

2017/01/17 01:43

自分でアレコレやるのは良いことだと思いますが、その都度質問を更新して下さい。こちらは、まだ症状を確認出来ていない状態なのです。(情報が少ないので同じ環境を作れていない)
guest

回答1

0

自己解決

何度かcontentsize.heightをprintしてみて気づいたのですが、ViewDidLayoutSubviewsの後にストーリボードのConstraintsで上書きされているようだったので、ViewDidAppearにも写して、さらにViewやimageviewのConstraintsを追加したら、ひとまず表示上は上手くいきました。
(競合するようなConstraintsは削除しました)

override func viewDidAppear(_ animated: Bool) { testtext.sizeToFit() textheight.constant = testtext.contentSize.height imgheight.constant = imgview.frame.height let totalheight: CGFloat = testtext.contentSize.height + imgview.frame.height + 8 myscroll.contentSize.height = totalheight viewheight.constant = totalheight print(myscroll.contentSize.height) }

ただ、根本的な原因や理屈はわからないままなので、もしわかる方がいらしたら教えていただけると助かります・・・

投稿2017/01/17 01:36

meia

総合スコア26

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問