5

uiscrollview でこの問題を理解するのに苦労しています。ボタンをクリックして新しいView Controllerを画面にプッシュし、元のView Controllerに戻ると、uiscrollview内のコンテンツが上に移動します。スクロールビューの上部がどのように変化するかに注目してください。

ここに画像の説明を入力 ここに画像の説明を入力

これがscrollViewのコードです

- (void)viewDidLoad{
    [super viewDidLoad];

    [scroll setScrollEnabled:YES];
    [scroll setContentSize:CGSizeMake(923, 934)];
    [self.view addSubview:scroll];
}
4

3 に答える 3

4

問題を解決しました

-(void)viewWillAppear:(BOOL)animated{

     [scroll setContentOffset:CGPointMake(0,0)];

}
于 2013-08-09T08:21:48.850 に答える
3

これは、ビューを作成するときに autoLayout が行われる方法が原因だと思います。何らかの理由で、最初にビュー (スクロールビュー) を画面に追加したとき、ビューの座標はナビゲーションバーの下に含まれませんが、別のビューが追加された後は含まれます。これを回避する 1 つの方法は、空のビューを作成し、それをサブビューとして追加してから、scrollView を追加することです。

そのような:

UIView *vi = [[UIView alloc] initWithFrame:CGRectMake(-10, -10, 1, 1)]
[vi setBackgroundColor:[UIColor clearColor]];
[self.view addSubview:vi];
//Then add scrollView

これは、オフスクリーンの 1x1 クリア ビューを作成し、それをメイン ビューに追加するだけです。

現在のコードでこれを行うと、常に 2 番目のケースのように動作するため、scrollView の y 座標を変更することもできます。

私は通常、次のことを行います。

frame.y+=self.navigationController.navigationBar.frame.size.height + 20;

これにより、ナビゲーション バーの高さとステータス バーの高さが加算されます (20)。

于 2013-08-08T22:36:07.830 に答える