[英]UIScrollView not scrolling to bottom in iOS 7
在下面的代碼示例中, self.contentView
引用所涉及的UIScrollView
。
// 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上按預期工作,但我更喜歡保留動畫。
注意: 不使用界面生成器
僅一行..您可以滾動到底部..!
[yourScrollview scrollRectToVisible:CGRectMake(yourScrollview.contentSize.width - 1, yourScrollview.contentSize.height - 1, 1, 1) animated:YES];
因此,我通過將調用包裝在異步調度塊中,很快找到了一個不令人滿意的解決方案。
// 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];
});
}
如果有人了解真正導致問題的原因並可以提供更好的解決方案,我很樂意接受這作為答案,但對於處理同一問題的其他所有人,也希望這對您也有用。
禁用“調整滾動視圖插圖”可以為我解決此問題。 (Xcode 6,iOS 8)
您可以在滾動視圖內主視圖的文件檢查器窗格中取消選擇“使用自動布局”。這可能對您有所幫助。 升級到iOS7 / xcode 5后,UIScrollView不滾動
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.