1

内でUIViewControllerは、下半分をスクロール可能にする必要があります。そこで、 を追加UIScrollViewして、ビューの高さの半分に配置しました。メソッドではviewDidAppear、スクロール可能にするために以下の 2 つのコード行を追加しました。

self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.scrollView.frame.size.height);
self.scrollView.frame = self.view.frame;

この方法は、スクロール ビューがビュー全体を占める場合に機能します。テスト済みです。しかし、この方法は私のニーズには合いませんでした。スクロール ビューは自動的に上に移動し、画面全体を占有します。これを引き起こすのはコードの2行目だと思いました。

そこで、スクロール ビューを削除UIViewし、View Controller に 2 つの を追加しました。下のビューに、 を追加しましたUIScrollView。メソッドでは、スクロール ビューを含む のviewDidAppearフレームを参照するように 2 行目を変更する同じ 2 つのコード行を配置しました。UIView

self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.scrollView.frame.size.height);
self.scrollView.frame = self.containerView.frame;

しかし、それもスクロールしません。

誰でもこれを正しく行う方法を教えてもらえますか?

ありがとうございました。

4

1 に答える 1

1

おい、スクロールビューのフレームを、実際に達成しようとしているものとはまったく異なるものに設定し続けます。

スクロール ビューを半分のスペースしか占有しないように設定するだけなら、カバーしたい画面の部分だけをカバーするframeように設定しないでください。height次にx & y、正しい位置からスクロール ビューを描画するように座標を設定します。

次のようにします。

//Shortcut to view's frame.
CGRect viewsFrame = self.view.frame;

/**
CGRectMake takes 4 parameters: x, y, width, height
x: is set to 0 since you want the scrollview to start from the left with no margin
y: you want the y position to start half way, so we grab the view's height and divide by 2  
width: you want your scrollview to span from left to right, so simply grab the view's width
height: you want your scrollview's height to be half of your screen height, so get view's height and divide by 2.
*/
CGRect frameForSV = CGRectMake(0, viewsFrame.size.height/2, viewsFrame.size.width, viewsFrame.size.height/2);

UIScrollView *myScrollView = [[UIScrollView alloc] initWithFrame:frameForSV];
[self.view addSubview:myScrollView];

次に、コンテンツのサイズを絶対的な値に基づいて設定するのではなく、実際にスクロールビュー内にあるコンテンツのサイズに基づいて設定し、スクロールビューが常にスクロールしてその中のすべてのコンテンツをカバーするようにすることをお勧めします。

また、コンテンツサイズがスクロールビューのフレームよりも大きい場合にのみ、スクロールビューがスクロールすることに注意してください

UPDATE 1この投稿のコメントを読んだ後、インターフェースビルダーですべてを設定しているため、viewController.m関連するファイル内のコードをコメントアウトするだけです。scrollview

結果は次のとおりです。 ここに画像の説明を入力

于 2014-01-30T20:00:20.250 に答える