2013-05-19 53 views
1

我正在使用導航控制器進行導航。UIScrollView更改界限

我的根視圖控制器的UIView包含我在IB中添加的UIScrollView。我發現,根據我的scrollView的當前可見部分,當我從這個視圖導航到另一個並返回時,我發現事情非常隨意。

希望這說明,讓

當我不滾動可言,沒有什麼效果。

Initial Image

當我向前走,並返回它仍然是相同的。 然而,當我滾動到我的滾動型的底部,如圖所示如下圖

Initial With Scroll

然後向前導航,然後立即落後國家我在這PIC Final State

最後,我記錄的所有邊界,幀,這個滾動視圖的內容的大小,以發現以下怪異變化

2013-05-19 14:16:54.139 app2[1302:c07] {{0, 0}, {320, 392}} 
2013-05-19 14:16:54.139 app2[1302:c07] {320, 456} 
2013-05-19 14:16:54.140 app2[1302:c07] {{0, 0}, {320, 392}} 

以上是初始博unds,contentSize,frame分別。 以下是導航和返回後。

2013-05-19 14:20:47.490 app2[1302:c07] {{0, 64}, {320, 392}} 
2013-05-19 14:20:47.490 app2[1302:c07] {320, 456} 
2013-05-19 14:20:47.491 app2[1302:c07] {{0, 0}, {320, 392}} 

我不知道我做錯了什麼。請幫幫我。

代碼 這是代碼,操縱滾動視圖

[self.scrollView setCanCancelContentTouches:YES]; 
[self.scrollView setDelaysContentTouches:NO]; 
[self.scrollView setFrame:self.view.frame]; 
[self.scrollView setBounds:self.view.bounds]; 


- (IBAction)moreFiltersFunction:(UIButton*)sender { 
sender.selected = !sender.isSelected; 
if (sender.isSelected) { 
    [self.scrollView addSubview:self.moreFiltersView]; 
    [self.scrollView setContentSize:CGSizeMake(320, self.scrollView.frame.size.height + 280)]; 
    [self.scrollView scrollRectToVisible:self.moreFiltersView.frame animated:YES]; 
} else { 
    [self.moreFiltersView removeFromSuperview]; 
    [self.scrollView setContentSize:CGSizeMake(320, self.view.frame.size.height)]; 
} 

}

+0

問題是你contentOffset。如果要更改某處的內容偏移量,請確保在推送之前不調用該方法。 – danypata

+0

@danypata:請看看我更新的帖子。我在我操縱scrollView的地方添加了代碼。請讓我知道如果我做錯了什麼。還請解釋我如何contentOffset和界限有關? –

+0

我遇到同樣的問題。你有沒有想過如何解決它?我也看到了界限,當我瀏覽回到我的滾動視圖被改變,但我不想手動設置的界限,因爲我使用的自動佈局無所不爲。 – Camputer

回答

1

好了,所以首先你並不需要設置你只需要滾動視圖的邊界與框架一起工作。

邊界和幀的概念從另一個SO交的簡短說明:(https://stackoverflow.com/a/1210141/2315974

一個的UIView的邊界是矩形,表示爲位置 (X,Y)和大小(寬度,高度)相對於其自己的座標系 (0,0)。

UIView的框架是矩形,表示爲位置(x,y) 和大小(寬度,高度)相對於它包含的超級視圖 之內。

另一件事,我不知道你什麼時候調用這個moreFiltersFunction動作,但是值之間有點不一致。

  1. 您應該從scrollView contentSize的當前值更改scrollView內容大小的加或減值。[self.scrollView setContentSize:CGSizeMake(320, self.scrollView.contentSize.height + 280)];

  2. 使用scrollRectToVisible方法時,如果sended作爲參數RECT已經可見要小心,滾動視圖不會滾動,這種方法也被改變滾動視圖內容偏移。

+0

感謝您的回覆。現在我理解了bounds和contentOffset之間的關係。但是這仍然不能解決我的問題。這次我登錄了我的contentOffset,我發現它們之間的關係。 –

+0

如果你找到了答案,將其標記爲接受這樣的問題不會出現在'unanswered'部分出現。 – danypata

+0

不幸的是,這並沒有解決我的問題。發現的方法是邊界,框架,contentSize和contentOffset設置在viewWillAppear中方法的一些默認值,但我並不感到滿意。 –