web-dev-qa-db-ja.com

UIScrollViewがスクロールしませんか?

InterfaceBuilderでUIScrollViewを作成し、UITextViewオブジェクトとUIImageViewオブジェクトをすでに追加しています。 IBOutletに接続し、-(void)viewDidLoadの下でコンテンツサイズを1200x2000に設定しました。ユーザーインタラクションが有効、マルチタッチ、スクロールが有効で、垂直および水平のスクロールインジケーターがすべてYESに設定されていることを示します。 iOSシミュレーターでアプリを起動すると、スクロールしません。この動作の原因は何でしょうか?

11
67cherries
  1. viewDidLoadはもうすぐです。ビューのレイアウトが行われるまで待つ必要があります。 viewDidAppearでcontentSizeを設定してみてください。

  2. 自動レイアウトを使用していますか?もしそうなら、次の答えをチェックしてください(そして1を忘れてください): IScrollViewは自動レイアウト制約を使用しません

21
Nenad M

コードを書かずにこの問題を克服する方法を私が知っている最善の方法は、すべてをストーリーボード内で実行できることです。その方法は次のとおりです。

  1. 自動レイアウトを有効のままにします。
  2. 汎用UIViewをUIScrollViewのサブビューにします。 2.1)すべてのViewコンポーネントをこの汎用UIView内に配置します。
  3. サブビューとUIScrollViewの間に自動レイアウト制約を作成します。最後のサブビューの右または下、あるいはその両方をUIScrollViewの右および/または下に固定する必要があります。これは、UIScrollViewがコンテンツサイズを認識する方法です。
9
Randel S

viewDidLoadは確かに早すぎますが、viewDidAppear:animatedも十分に遅れていない可能性があります。 contentOffsetを設定する理想的な場所はviewDidLayoutSubviewsの内部です。

4
Cezar

自動レイアウトを使用している場合は、コンテンツサイズを設定するコードを必ず配置してください

viewDidLayoutSubviews
4
nithinreddy

プルして更新する機能のためにUIScrollViewのカスタムビューを使用していますが、スクロールビューはスクロールできません。 contentSizeAutoLayoutで設定してみて、コードでも設定してみます。スクロールビューはまだスクロールできません。

3〜4時間過ごした後、contentInsetで解きます。スクロールビューに、スクロール用のスペースを追加するように指示します。

override func viewDidLayoutSubviews() {
    // Add extra 15pt on the `top` of scrollView.
    //self.scrollView.contentInset = UIEdgeInsetsMake(15, 0, 0, 0)

    // Add extra 2pt on the `bottom` of scrollView, let it be scrollable. And the UI is more beautiful in my case. 
    self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 2, 0)
}

リファレンスドキュメント:

3
AechoLiu

これは、スクロールビューをしばらく使用しなかった後に誰かが忘れた場合に備えて、スクロールビューの優れたウォークスルーです。 https://medium.com/@pradeep_chauhan/how-to-configure-a-uiscrollview-with- auto-layout-in-interface-builder-218dcb4022d7

基本的に、次のように、ビュー->スクロールビュー->ビューがあることを確認してください。
enter image description here
それでは、
1。スクロールビューの制約(上、下、先頭、末尾)を(0,0,0,0)に設定します。
2。内部ビューの制約(上、下、先頭、末尾)を(0,0,0,0)に設定します。
3。親ビューと同じ幅と同じ高さになるように内部ビューを設定します。
4。内部ビューの高さ制約を選択し、優先度を低(250)に設定します。

1
Eden