1

ナビゲーションにナビゲーションコントローラーを使用しています。

私のルート ビュー コントローラーの UIView には、IB に追加した UIScrollView が含まれています。scrollView の現在の表示部分に応じて、このビューから別のビューに移動して戻ると、物事が非常に不自然であることがわかります。

この説明が役に立てば幸いです

まったくスクロールしないと効果がありません。

初期画像

進んで戻っても変わらない。ただし、次の図に示すように、スクロールビューの一番下までスクロールすると

イニシャル付きスクロール

次に、前方に移動してからすぐに後方に移動すると、この写真に着きます 最終状態

最後に、このスクロールビューのすべての境界、フレーム、コンテンツサイズを記録して、次の奇妙な変更を見つけました

2013-05-19 14:16:54.139 app2[1302:c07] {{0, 0}, {320, 392}}
2013-05-19 14:16:54.139 app2[1302:c07] {320, 456}
2013-05-19 14:16:54.140 app2[1302:c07] {{0, 0}, {320, 392}}

上記は、それぞれ初期境界、contentSize、frame です。以下はナビゲーション後とバックです。

2013-05-19 14:20:47.490 app2[1302:c07] {{0, 64}, {320, 392}}
2013-05-19 14:20:47.490 app2[1302:c07] {320, 456}
2013-05-19 14:20:47.491 app2[1302:c07] {{0, 0}, {320, 392}}

何を間違えたのかわからない。私を助けてください。

コード これは scrollView を操作するコードです

[self.scrollView setCanCancelContentTouches:YES];
[self.scrollView setDelaysContentTouches:NO];
[self.scrollView setFrame:self.view.frame];
[self.scrollView setBounds:self.view.bounds];


- (IBAction)moreFiltersFunction:(UIButton*)sender {
sender.selected = !sender.isSelected;
if (sender.isSelected) {
    [self.scrollView addSubview:self.moreFiltersView];
    [self.scrollView setContentSize:CGSizeMake(320, self.scrollView.frame.size.height + 280)];
    [self.scrollView scrollRectToVisible:self.moreFiltersView.frame animated:YES];
} else {
    [self.moreFiltersView removeFromSuperview];
    [self.scrollView setContentSize:CGSizeMake(320, self.view.frame.size.height)];
}

}

4

1 に答える 1

1

まず、スクロール ビューの境界を設定する必要はありません。フレームを操作するだけで済みます。

別のSO投稿からの境界とフレームの概念の簡単な説明:( https://stackoverflow.com/a/1210141/2315974 )

UIView の境界は、独自の座標系 (0, 0) に対する位置 (x、y) とサイズ (幅、高さ) として表される四角形です。

UIView のフレームは長方形で、含まれるスーパービューに対する位置 (x、y) とサイズ (幅、高さ) で表されます。

もう 1 つ、このアクションをいつ呼び出すかはわかりませんがmoreFiltersFunction、値の間には少し矛盾があります。

  1. scrollView contentSize の現在の値に値を加算または減算して、scrollView コンテンツ サイズを変更する必要があります。[self.scrollView setContentSize:CGSizeMake(320, self.scrollView.contentSize.height + 280)];

  2. メソッドを使用するときは注意してscrollRectToVisibleください。パラメーターとして送信された rect が既に表示されている場合、scrollView はスクロールしません。また、このメソッドはスクロール ビューのコンテンツ オフセットを変更しています。

于 2013-05-19T09:29:27.283 に答える