1

scrollview下にスクロールせず、上にスクロールするだけという奇妙な問題に直面しました。私はscrollview自分のアプリに持っています。私のコーディングを見てください

.....

self.scrollView = [[UIScrollView alloc] initWithFrame: CGRectMake(0, 0, 320,427)];

[self.view addSubViews: self.scrollView];

UIView *blueView = [[UIView alloc] initWithFrame: CGRectMake(0, 47, 320, 320)];

blueView.backgroundColor = [UIColor blueColor];

[self.scrollView addSubViews: blueView];

self.scrollView.contentSize = CGSize(320, 640);

....

私の問題はcontentSize、私が変更した値に関係ScrollViewなく、スクロールダウンではなく、スクロールアップのみです。ユーザーがblueView元の位置からiPhone画面の上部または下部に移動できるようにしたい。

この問題がありますか?

4

2 に答える 2

3

問題

blueView問題は、内での向きにあるようですscrollView。のフレームを に設定していblueViewますCGRect (0, 47, 320, 320)。このようにフレームを設定すると、暗黙的に言っていることの 1 つが次のようになります。

の上端blueViewは、 の上端から 47 ポイント下にありscrollViewます。

それは完全に正当なことですが、それがあなたが説明する問題の原因です。 scrollViewデフォルトでは、四角形(0, 0, 320, 480)が表示された状態で開始するように設計されているため、下にスクロールしません。contentSizeプロパティは、位置ではなく、 内のコンテンツのサイズのみを示しますUIScrollView。あなたがそれを設定するとき、あなたは基本的に言っていますscrollView

コンテンツの起点から見て、コンテンツは幅 320 ポイント、高さ 640 ポイントです。

したがって、scrollView座標の上にコンテンツがないことがわかっているため、上にスクロールしません(0, 0)


ソリューション

必要な機能を実現するには、3 つの手順を実行する必要があります。

  1. を上下にスクロールcontentSizeできる大きさに設定します。blueView
  2. blueViewの縦中央に入れるscrollView
  3. をスクロールして、scrollView最初は が中心になるようにしblueViewます。

  • を上下にスクロールcontentSizeできる大きさに設定します。blueView

プロパティの正しい値を計算する必要がありcontentSizeます。型CGSizeなので、 と の 2 つの部分が必要widthですheightwidthは簡単です。横スクロールは必要ないようなので、画面の幅に合わせて320ください。高さはもう少し難しいです。上下にスクロールしたときに画面の上下に触れるだけblueViewにしたい場合は、いくつかの計算を行う必要があります。正しい全体の高さは、画面の高さの 2 倍から の高さを引いたものになります。そう:blueView

scrollView.contentSize = CGSizeMake(320, 480 * 2.0 - blueView.frame.size.height);
  • blueViewの縦中央に入れるscrollView

簡単だ; centerblueViewのプロパティを設定するだけです。

blueView.center = CGPointMake(160, scrollView.contentSize.height / 2.0);
  • をスクロールして、scrollView最初は が中心になるようにしblueViewます。

Apple UIScrollView のドキュメントを確認すると、インスタンス メソッドが表示されます- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated。これはまさにscrollViewプログラムでスクロールするために必要なものです。必要な rect はblueView、iPhone の画面サイズの を中心としたものです。そう:

CGRect targetRect = CGRectMake(0, scrollView.contentSize.height / 2.0 - 240,
                               320, 480);
[scrollView scrollRectToVisible:targetRect animated:NO];

このスクロールは必ず で行ってください。viewWillAppearそうすれば、ユーザーがビューを見たときにすぐに準備が整います。

それだけです。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2012-07-19T15:32:05.213 に答える
2

scrollView のコンテンツ サイズは、保持しているビューのサイズにする必要があります。これはコードがどうあるべきか、このようなことを試してください。

self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(X, Y, W, H1)];
UIView * blueView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, W, H2)];
self.scrollView .contentSize = blueView.frame.size;
[self.scrollView addSubview:blueView];
[self.view addSubView: self.scrollView];

ライリーのおかげです。ここで、H1 は UIScrollVIew の高さであり、H2 は blueView の高さであり、(H1 < H2) です。

于 2012-07-19T15:06:24.787 に答える