簡體   English   中英

UIScrollView不會在iOS 7中滾動到底部

[英]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)

UIScrollView不滾動

您可以在滾動視圖內主視圖的文件檢查器窗格中取消選擇“使用自動布局”。這可能對您有所幫助。 升級到iOS7 / xcode 5后,UIScrollView不滾動

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM