UIScrollView,分页和旋转:旋转后第二个视图未正确对齐

时间:2012-03-07 20:37:52

标签: objective-c ios ipad uiscrollview

我正在使用启用了Paging的UIScrollView,并使用以下代码向其添加子视图(核心绘图图表)。

视图之间的水平滚动可以正常工作。 但是,当显示第二个视图然后旋转从横向模式到纵向模式时,第二个视图部分向右移动,第一个视图右侧的一部分显示在左侧,因此“破坏”分页模式。

您可以帮助解决这些问题吗 ?我尝试了很多替代方案,但找不到我的错误。非常感谢你!

这是我的iPad屏幕在使用第二个视图旋转到纵向模式后的外观:

Parts of first screen (large bars) shown on the left side of the second screen

这是我的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];

}

这就是我实施轮换的方式:

- (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);
        } 
    }

2 个答案:

答案 0 :(得分:3)

我认为你应该在轮换时更改scrollview的contentOffset。 您应该有一种方法可以在轮换之前知道当前显示的页面(可能将此信息放在变量中)。然后在你的didRotate ..方法中,在调整大小后调整scrollview的contentOffset,如下所示:

CGFloat offset = self.scrollView.frame.size.width * currentPageIndex;
[self.scrollView setContentOffset: offset];

答案 1 :(得分:1)

作为在视图控制器中布置子视图的替代方法,您是否考虑过对UIScrollView进行子类化并覆盖它的layoutSubviews方法?您还可以考虑将维度定义为百分比而不是固定点 - 因为点值将根据旋转和其他UI元素(如导航和工具栏)的存在而变化。您可能会遇到麻烦,因为您在旋转方法中手动调整UI元素的大小,同时UI将尝试根据您的调整大小掩码自动调整元素大小。只是我的想法...