2011-04-14 84 views
5

我有一個UIScrollView,其中只啓用垂直滾動。我正在顯示一個按鈕網格(類似於照片查看器圖像網格)。網格必須根據屏幕方向以不同方式繪製,以便使用所有的屏幕空間。鑑於我的按鈕的大小,我可以縱向放入3行,橫向放入4行。在定向更改期間,UIScrollView在SetContentSize之後自動滾動到頂部 - 我該如何防止該問題?

我重新定位了所有按鈕:willRotateToInterfaceOrientation:duration,然後在我的UIScrollView上調用:setContentSize:。一切似乎都很好,除了在調用SetContentSize之後發生的自動滾動之外:換句話說,假設我處於肖像狀態,並沿着列表的3/4滾動,當我旋轉到橫向時,它會自動將所有背部滾動到頂部。

有趣的是,在相同的情況下,如果我做一個小型輕彈向上或向下滾動,然後立即旋轉設備,滾動視圖會正確重繪,並保留當前滾動位置!

所以,要清楚,這裏的罪魁禍首似乎是SetContentSize :,但顯然我必須調用該滾動視圖才能正確滾動。

關於如何保留當前滾動位置的任何想法?

謝謝!

回答

1

您可能會嘗試執行UIScrollViewDelegate方法scrollViewShouldScrollToTop:,它告訴調用方是否滾動到頂部。您可能必須在委託中設置一些標誌,指示是否正在進行輪播,因爲在正常情況下,您可能實際上需要能夠點按狀態欄並將滾動視圖滾動到頂部。

另一方面,如果您不希望滾動視圖自動滾動到頂部,只需實現該委託方法並使其返回NO。

+0

這沒有按」工作。這與使用相同的效果:scrollView.scrollsToTop = NO;其中,是的,當點擊狀態欄時防止自動滾動到頂部,但是,我在原始問題中描述的行爲仍然存在... – bpatrick100 2011-04-14 17:36:20

+0

另一個想法:在調用'setContentSize:'之前,請記住你的內容,然後在調用之後,調用'setContentOffset:'。在設置內容大小時,內容偏移量可能會有意地重置爲(0,0)。您可能已將內容大小重置爲不再包含內容偏移量在重置大小之前所包含的內容大小。因此,通過確保在內容大小更改後始終顯示某些內容,SDK在某種程度上可能會保護自己和用戶體驗。 – 2011-04-14 17:45:07

0

我有這個問題,只是做了這一點,它很適合我

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    //calculate percentage down scrollview currently at 
    float c = self.scrollView.contentOffset.y/self.scrollView.contentSize.height; 

    //reposition subviews in the scrollview 
    [self positionThumbnails:toInterfaceOrientation]; 

    //set the new scrollview offset to the same percentage, 
    // using the new scrollview height to calculate 
    self.scrollView.contentOffset = 
      CGPointMake(0, c * self.scrollView.contentSize.height); 
} 

就我而言,我有一個固定的寬度,以設備大小滾動視圖和可變高度

相關問題