2012-03-07 40 views
1

我正在使用啓用分頁的UIScrollView,並且下面的代碼向其添加子視圖(核心圖表)。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]; 

}

這是我如何實現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); 
     } 
    } 

回答

3

我認爲你應該改變scrollview的contentOffset旋轉時發生。 你應該有一種方法來知道旋轉之前當前顯示哪個頁面(也許把這個信息放在一個變量中)。然後在你的didRotate ..方法設置滾動視圖的contentOffset後調整其大小,如下所示:

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

難道是旋轉後發生扭曲第二個視圖的大小(contentSize的減少)?我相信第二個視圖應該在旋轉後向左移動一定的像素量。我怎麼能把這個輪換代碼?有任何想法嗎?謝謝,ale84! – AlexR 2012-03-07 22:15:59

+0

您是否嘗試按照我的建議在didRotation中設置contentOffset? – ale84 2012-03-07 22:52:57

+1

我試着設置contentOffset滾動到相應的視圖的開始,它的工作原理。但是,在我看來,這是一個解決方法。沒有更優雅的版本來支持分頁和旋轉嗎? – AlexR 2012-03-08 19:18:02

1

作爲替代在您的視圖控制器佈置您的子視圖,你認爲你的子類UIScrollView的並重寫它的layoutSubviews方法?您也可以考慮將維度定義爲百分比而不是固定點 - 因爲點值將根據旋轉和其他UI元素(如導航和工具欄)的存在而發生變化。您可能會遇到麻煩,因爲您正在手動調整旋轉方法中的UI元素的大小,同時UI將嘗試根據調整大小掩碼自動調整元素的大小。只是我的想法...

+0

嗨艾薩克,我不想子類UIScrollView。我相信UIScrollView應該提供我開箱即用的行爲。 – AlexR 2012-03-08 19:17:08

+0

將視圖和視圖控制器的行爲混合在一起時,有時可能會遇到難以協調的佈局問題。我明白你不想子類化,這很公平。我的建議源於這樣一個事實,即您正在視圖控制器中操作視圖佈局,該視圖控制器正在混合視圖和控制器的角色。我並不是說自己不會受這種做法的影響,但是,如果你正在尋找一個優雅的解決方案,可以回到以前的看法:讓視圖成爲視圖(包括佈置自己的子視圖),讓控制器成爲控制器。祝你好運! – isaac 2012-03-08 21:18:41