UIScrollView,分页和旋转:旋转后第二个视图未正确对齐
问题描述:
我正在使用启用分页的UIScrollView,并且下面的代码向其添加子视图(核心图表)。UIScrollView,分页和旋转:旋转后第二个视图未正确对齐
视图之间的水平滚动正常工作。 但是,当显示第二个视图,然后将从横向模式旋转到纵向模式时,第二个视图部分向右移动,第一个视图的右侧部分显示在左侧,因此“破坏”分页模式。
可以帮助我有这些问题请问?我尝试了很多选择,但找不到我的错误。非常感谢!
这是我的iPad屏幕的外观与第二视图旋转为纵向模式后:
:
这是我的viewDidLoad方法:
- (void)viewDidLoad {
self.scrollView.contentSize = CGSizeMake(768 * 2, 400);
chart1 = [[CPTGraphHostingView alloc]initWithFrame:CGRectMake(0, 0, 768, 400)];
chart2 = [[CPTGraphHostingView alloc]initWithFrame:CGRectMake(768, 0, 768, 400)];
self.scrollView.autoresizesSubviews = NO;
chart1.autoresizesSubviews = YES;
chart2.autoresizesSubviews = YES;
self.scrollView.contentOffset = CGPointZero;
self.scrollView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth ;
chart1.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth ;
chart2.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth ;
[self.scrollView addSubview:chart1];
[self.scrollView addSubview:chart2];
}
这是我如何实现ented旋转:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
if (UIDeviceOrientationIsPortrait(fromInterfaceOrientation)) {
self.scrollView.contentSize = CGSizeMake(704 * 2, 400);
chart1.frame = CGRectMake(0, 0, 704, 400);
chart2.frame = CGRectMake(704, 0, 704, 400);
}
else {
self.scrollView.contentSize = CGSizeMake(768 * 2, 400);
chart1.frame = CGRectMake(0, 0, 768, 400);
chart2.frame = CGRectMake(768, 0, 768, 400);
}
}
答
我认为你应该改变scrollview的contentOffset旋转时发生。 你应该有一种方法来知道旋转之前当前显示哪个页面(也许把这个信息放在一个变量中)。然后在你的didRotate ..方法设置滚动视图的contentOffset后调整其大小,如下所示:
CGFloat offset = self.scrollView.frame.size.width * currentPageIndex;
[self.scrollView setContentOffset: offset];
答
作为替代在您的视图控制器布置您的子视图,你认为你的子类UIScrollView的并重写它的layoutSubviews方法?您也可以考虑将维度定义为百分比而不是固定点 - 因为点值将根据旋转和其他UI元素(如导航和工具栏)的存在而发生变化。您可能会遇到麻烦,因为您正在手动调整旋转方法中的UI元素的大小,同时UI将尝试根据调整大小掩码自动调整元素的大小。只是我的想法...
难道是旋转后发生扭曲第二个视图的大小(contentSize的减少)?我相信第二个视图应该在旋转后向左移动一定的像素量。我怎么能把这个轮换代码?有任何想法吗?谢谢,ale84! – AlexR 2012-03-07 22:15:59
您是否尝试按照我的建议在didRotation中设置contentOffset? – ale84 2012-03-07 22:52:57
我试着设置contentOffset滚动到相应的视图的开始,它的工作原理。但是,在我看来,这是一个解决方法。没有更优雅的版本来支持分页和旋转吗? – AlexR 2012-03-08 19:18:02