2013-07-04 47 views
4

我有一個UIScrollView根本不滾動。如果我啓用了彈跳功能,我可以向兩側滾動足夠多,以便看到視圖外有內容,但是當我釋放時,它會立即回到原點。我打開了分頁,但如果關閉它,我會得到相同的行爲。 我關閉了自動佈局。 在IB中,scrollView位於MainViewController中,正確連接到IBOutlet,如下所示。UIScrollView不滾動

@interface MainViewController() 

@property (strong, nonatomic) IBOutlet UIScrollView *scrollView; 

@end 

@implementation MainViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    for (int i = 0; i < 3; i++) { 
     CGRect frame; 
     frame.origin.x = self.scrollView.frame.size.width * i; 
     frame.origin.y = 0; 
     frame.size = self.scrollView.frame.size; 

     // I might be doing this wrong, but it returns a PosterView object just like I want it to. 
     NSArray *view = [[NSBundle mainBundle] loadNibNamed:@"posterView" owner:self options:nil]; 
     [[view objectAtIndex:0] setFrame:frame]; 

     [self.scrollView addSubview:[view objectAtIndex:0]]; 
    } 

    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * 3, self.scrollView.frame.size.height); 
} 

如果我使用這種方法,但它正確滾動。

-(void)scrollToPage:(NSInteger)page{ 
    float pageWidth = [self.scrollView frame].size.width; 
    [self.scrollView setContentOffset:CGPointMake(page*pageWidth,0) animated:YES]; 
} 

我曾嘗試實施UIScrollViewDelegate和壓倒一切的scrollViewDidScroll,但它永遠不會被調用(除非我能彈跳,就像我剛纔提到的)。

回答

8

UIScrollView只有在大於其幀大小的contentSize時纔會滾動。如果不滾動可能意味着它的contentSize不夠大。所以請在設置後檢查它的contentSize是什麼。

如果contentSize是因爲你期待它是然後檢查是否scrollView是scrollEnabled或不。有時啓用反彈會產生滾動正在工作的印象。另外,如果沒有啓用滾動,則在這種情況下設置contentOffset也適用,因爲它會根據提供的大小作爲參數移動內容。

+0

contentSize.width是960,幀顯然是320,所以不應該是這個問題。滾動被設置爲在IB中啓用,嘗試在代碼中做,但沒有成功! –

+1

你提供的代碼看起來很好。內容大小始終保持(3 * 320,480)?或者可能以某種方式重置 – Zen

+0

你是對的,它在viewDidLoad之後重置!通過在第一次嘗試滾動時設置contentSize,它現在可以工作!謝謝。 –

3

您應該在viewDidLayoutSubviews內設置contentSize。它在視圖生命週期中已經足夠晚了,因爲它不會被任何其他方法重置,並且不需要您檢查視圖是否第一次滾動。

+0

+1這是僅適用於我的解決方案。你也必須把scrollView作爲控制器視圖的子視圖(scrollView不能直接控制器的視圖)。奇怪,但... – JakubKnejzlik

+0

約束導致我的contentSize在viewDidLoad中被覆蓋,但爲什麼約束會影響contentSize?有時候我真的討厭限制。 – inorganik