2014-02-13 116 views
1

在以下代碼示例中,self.contentView指的是UIScrollViewUIScrollView無法滾動到iOS 7底部

// Scroll to bottom. 
CGPoint bottomOffset = CGPointMake(0, self.contentView.contentSize.height - 
            self.contentView.bounds.size.height); 
if (bottomOffset.y >= 0.0) 
{ 
    [self.contentView setContentOffset:bottomOffset animated:YES]; 
} 

奇怪的是,在IOS 6這個工作完全正常,但在IOS 7滾動視圖(假定它有一個contentSize這是垂直大於它的frame.size.height)僅滾動到最底部子視圖加入到最底部滾動視圖。

例如,如果在下列情況下成立:

self.contentView.frame.size.height == 50.0 
self.contentView.contentSize.height == 100.0 

aSubView.frame.origin.y == 50.0 
aSubView.frame.size.height == 20.0 

滾動代碼只會滾動,直至aSubView可見; self.contentView.contentOffset.y == 20.0而不是self.contentView.contentOffset.y == 50.0,它將位於整個滾動視圖的底部。

這是(當然)發生,直到以編程方式將另一個子視圖添加到self.contentView(通過用戶交互),然後一切都自行糾正。

爲了清楚起見,我在滾動代碼之前和之後設置斷點以測量對self.contentView.contentOffset的更改。

其他有趣的事實,如果我刪除animated並直接設置contentOffset它在iOS 7上按預期工作,但我更喜歡保留動畫。

注:不使用界面生成器

回答

5

所以我相當迅速地想出了一個相當不令人滿意的解決方案通過包裝在一個異步調度模塊調用。

// Scroll to bottom. 
CGPoint bottomOffset = CGPointMake(0, self.contentView.contentSize.height 
            - self.contentView.bounds.size.height); 
if (bottomOffset.y >= 0.0) 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.contentView setContentOffset:bottomOffset animated:YES]; 
    }); 
} 

如果有人明白什麼是真正造成問題的原因,並能提供更好的解決方案我會欣然接受的答案,但對於其他人處理同樣的問題希望這對你的作品也是如此。

+0

爲什麼不令人滿意?動畫代碼應該始終在主線程上運行,並且只需確保它與此相關即可。您需要強制執行的內在原因以及應用程序不會自動使其在主線程上運行必須與某些可能只有Apple工程師才能解釋的內部工作相關。 – manecosta

+2

這是不令人滿意的,因爲代碼已經在iOS 6中沒有調度塊的情況下工作,而且這個代碼只能在主線程上執行,所以它應該在沒有額外的調度塊的情況下工作。 事實上,我必須強制程序等待,直到當前的Runloop循環完成,執行該代碼行之前的任何操作都會顯示缺少對調用該方法時發生的事情的理解。 –

+1

這種行爲很奇怪。強制使用主隊列解決了我遇到的滾動問題...謝謝你的幫助。 – Vico

0

禁用「Adjust Scroll View Insets」爲我解決了這個問題。 (Xcode中6,的iOS 8)

UIScrollView Not Scrolling

+0

沒有涉及到筆尖。你知道這個程序的等價物嗎? –

+0

'self.automaticallyAdjustsScrollViewInsets = NO;' – RPM

7

只有一條線路..你可以滾動到下..!

[yourScrollview scrollRectToVisible:CGRectMake(yourScrollview.contentSize.width - 1, yourScrollview.contentSize.height - 1, 1, 1) animated:YES]; 
+0

This Worked for me !!!真棒! – Mangesh