1

プログラムで作成したUIScrollViewがあり、その背後にあるUIViewのサイズとして作成しています。私はviewDidAppear基本的に持っています:

UIScrollView *scrollView= [[UIScrollView alloc] initWithFrame:mainView.bounds];
//mainView being the UIView behind

デバイスが回転すると、当然、バックグラウンドのUIViewは境界をより広く、より短く変更します(ただし、x、y≠y、x)。

私の-(void)didRotateFromInterfaceOrientation:中に`NSLog(@"%@ "、NSStringFromCGRect(mainView.bounds));を入れて、mainViewの境界を切り替えましたが、これを行うと:

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    scrollView.bounds = mainView.bounds;
    NSLog(@"%@", NSStringFromCGRect(scrollView.bounds));
    NSLog(@"%@", NSStringFromCGRect(mainView.bounds));
}

それでも間違って表示されます。NSLogは両方のビューで同じ境界をログアウトしますが、画面上ではmainViewが正しく、元の(0,0)がmainViewの外側にあるかのように、scrollViewが反転したように見えます。サイズが間違って反転しています。何かを再描画する必要がありますか、それとも間違った場所でこれらすべてを呼び出していますか?または.bounds、使用するのに適切な変数ではありませんか?

編集

フレームを更新することは、を使用してフレームを再開することとは異なることに気付きinitWithFrame:ましたが、同じ方法で現在のコンテンツを同じままにしておきたいと思います。

4

1 に答える 1

1

境界ではなく、スクロールビューのフレームを設定する必要があります

scrollView.frame = mainView.bounds;

または、正しい自動サイズ変更マスク/制約を設定すると、自動的にサイズ変更されます。

于 2013-01-13T22:36:02.617 に答える