2010-11-25 21 views
16

私は自分のUIViewを持っています。それから、私はサブビューとしてUIScrollViewを持つサブUIViewを持っています。その後、UIScrollViewにはサブUIImageViewがあります。 UIScrollViewとUIImageViewは同じサイズです。それらは、サブビューのUIViewよりもはるかに大きくなっています。私はこれがスクロールの仕事をするだろうと仮定した。それはしません。スクロールビューを動作させるには何らかのコードが必要ですか?スクロールするUIScrollViewはスクロールしません!

答えて

29

あなたは、このケースであなたのサブビューのフレームサイズである合計スクロール可能なサイズを一致させるためにUIScrollView.contentSizeを設定する必要があります。

+0

これはIBにないコードで行う必要がありますか? – Marty

+1

私はそう思います。 IBでそれを見たことはありません。 – tia

+0

ええ、setContentSizeで行う必要がありました: – Marty

6

、あなたはその内容よりも小さいscrollviewのフレーム、含まれている画像やビューを作成する必要があります。

+0

その運がなかった。スクロールビューのサブビュー(uiimageview)はスクロールビューよりも大きいです。 – Marty

+0

イメージのサイズに合わせてコンテンツサイズを設定しましたか?そうでない場合は、イメージを切り抜いているだけです...スクロールするものは何も残っていません。 – hotpaw2

+0

私はIBでフレームサイズを設定しました。それはどういう意味ですか?私はコードで何もしなかった。 – Marty

3

私はIBの私のscrollviewのすべてのコンテンツを配置。 (ボタン、ラベル、テキストフィールドなど)。フルサイズは500丈です。 それから、私はそれをIBの高さ436にリサイズしました。

は、その後のコードで、私はこれがあるのviewDidLoad置く:

optionsScrollView.contentSize = CGSizeMake(320,500); 

だから、私はスクロールできる64個のピクセルを残します。それは完全に動作します。

また、私の.hファイルのための@interfaceの<>カッコ内に "UIScrollViewDelegate"を置き、IBのFile所有者にスクロールビューのデリゲートアウトレットを接続しました。

1

さらに、スクロールを有効にしましたか?あなたのフレームは、それは、あなたのコンテンツのサイズに設定されている場合は
フレーム
その後、
contentSize
ビューやオブジェクトなど...

:プロパティ

@property(nonatomic, getter=isScrollEnabled) BOOL scrollEnabled 
1

スクロールビューはこれで作品の 見てスクロールしません。 だから(IB右側のパネルで - >最後から二番目のタブ「サイズインスペクタ」)あなたのフレームを設定し、あなたのアプリの長さに(私はナビゲーションバーとタブバーを持っているとして、私の場合には、それは367である)をプログラム的にcontentSizeを設定します - それがスクロールすることができますので、うん、あなたは...あなたのフレームよりもそれを推測。

4

これはほとんどに明白であるかもしれないが、私は私のUIScrollViewのは、私が「そうスクロールしないだろう、なぜ不思議年代を過ごした!!

幸せな日他の人に役立つ場合に私を止めていた投稿を投稿する:

UIScrollViewは、表示したい内容の目に見える範囲の寸法でなければならず、内容のサイズでなければならない。

私のためにばかげて私は知っていますが、もしそれが誰かを助けるならば、

+0

'UIScrollView'は画面に表示させたいもののサイズで、scrollviewの' contentSize'プロパティはスクロールする領域のサイズ(内容)に設定する必要があります。 contentSizeがフレームサイズより小さいか等しい場合、スクロールビューはスクロールしません。 – Olie

13

受け入れ答えで述べたように、あなたはUIScrollViewcontentSizeプロパティを設定する必要があります。

これは、Interface Builderで行うことができます。

  1. 選択スクロールビュー
  2. を選択して下の「ユーザー定義のランタイム属性」正しい
  3. 上のユーティリティペインの「アイデンティティを検査」「キーのパス」を設定し
  4. 「+」ボタンをクリックしてください( '{320、600}など)
'contentSize'
  • の値は 'サイズ' '{幅、高さ}' 'の値' 値に設定
  • に 'タイプ' の値を設定します0

    ビルドして実行すると、スクロールビューがスクロールします。

    コンテンツの挿入はスクロールには影響しません。 What's the UIScrollView contentInset property for?

  • +1

    これは完全に機能し、tiaの初期回答を実装する方法の優れた説明です! – Ryan

    +0

    すてきな答えです! – HalR

    +0

    私のコードがデバイスの種類を越えて動作するようにするにはどうすればいいですか?明らかにiPadはこれよりもはるかに広いでしょう – Guy

    0

    スクロールビューが今日スクロールしていなかった理由を追加したいと思います。私はすべての私のサブビューをコードに正しく追加しました。 contentSizeを正しく設定しました。ユーザー操作が有効になりました。

    私の問題はInterface Builderにありました。 UIScrollViewのサブビューとしてUIButtonを配置しました。そのボタンはスクロールビューをスクロールさせませんでした。 Interface Builderからボタンを削除してコード内でそのボタンを処理すると、スクロールビューがスクロールし始めました。

    だからそこに行く。なぜそれがスクロールしていないのかを突き止めるときにチェックするもう一つのことがあります。 Interface Builderでサブビューを確認します。

    1

    ここで言及していない他の重要なことは、UIScrollViewがAutoLayoutでうまく再生できないということです。すべてが正しく行われたように見える場合は、ViewControllerに自動レイアウトがオンになっているかどうかを確認し、無効になっている場合はオフにします。

    (あなたがスクロールするたびに、ビューが再レイアウトされたあるガク。!)

    ので:

    • はscrollviewのcontentSizeは確かAutoLayoutのために作るそのframe.size
    • よりも大きいことを確認してくださいViewControllerはオフになります。
    関連する問題