2

2 つのサブビューを含む UIScrollView があり、それぞれがデバイスの画面のサイズとまったく同じです。で子ビューのサイズを設定しましたAppDelegate:

CGRect screenRect = [[self window] bounds];
[[myViewController1 view] setFrame:screenRect];
screenRect.origin.x = screenRect.size.width;
[[myViewController2 view] setFrame:screenRect];

次に、これらのビューを a に追加しUIScrollView、UIScrollViewcontentSizeを画面の幅の 2 倍に設定します。

CGRect containerRect = CGRectMake(0, 0, screenRect.size.width * 2, screenRect.size.height);
UIScrollView *sv = (UIScrollView *)[myRootViewController view];
[sv addSubview:[myViewController1 view]];
[sv addSubview:[myViewController2 view]];
[sv setFrame:[[self window] bounds]];
[sv setContentSize:containerRect.size];

アプリを実行すると、予想どおり、ビューが並べて表示されます。ただし、どちらのビューも画面幅よりもはるかに広いです。さらに、UIScrollView高さが画面の高さと同じであるため、垂直スクロールが制限されません。

UIScrollView で垂直スクロールを制限し、その子を適切なサイズのフレームに強制的にレンダリングするにはどうすればよいですか?

4

1 に答える 1

2

[[self window] 境界] をログに記録しましたか? ステータスバーが含まれている可能性があります。これにより、コンテンツ ビューが 20 ポイント高くなりすぎます (したがって、垂直スクロールが可能になります)。多分:

CGRect screenFrame = [[UIScreen mainScreen] applicationFrame];
myViewController1.view.frame = CGRectMake(0.0, 0.0, CGRectGetWidth(screenFrame), CGRectGetHeight(screenFrame));
myViewController2.view.frame = CGRectOffset(myViewController1.view.frame, CGRectGetWidth(screenFrame), 0.0);

その後:

CGRect contentRect = CGRectMake(0, 0, CGRectGetWidth(screenFrame), CGRectGetHeight(screenFrame));
UIScrollView *sv = (UIScrollView *)myRootViewController.view;
[sv addSubview:myViewController1.view];
[sv addSubview:myViewController2.view];
[sv setContentSize:contentRect.size];
于 2013-08-05T20:09:12.967 に答える