1

在下面的代码示例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 上按预期工作,但我更喜欢保留动画。

注意:不使用界面生成器

4

4 回答 4

7

只需一行..您可以滚动到底部..!

[yourScrollview scrollRectToVisible:CGRectMake(yourScrollview.contentSize.width - 1, yourScrollview.contentSize.height - 1, 1, 1) animated:YES];
于 2015-05-13T11:20:01.650 回答
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];
    });
}

如果有人了解真正导致问题的原因并可以提供更好的解决方案,我很乐意接受它作为答案,但对于处理相同问题的其他人来说,希望这也适用于您。

于 2014-02-13T01:38:33.780 回答
0

禁用“调整滚动视图插图”为我解决了这个问题。(Xcode 6,iOS 8)

UIScrollView 不滚动

于 2014-10-01T23:17:10.407 回答
-1

您可以在滚动视图的主视图的文件检查器窗格中取消选择“使用自动布局”。这可能对您有所帮助。升级到 iOS7/xcode 5 后 UIScrollView 不滚动

于 2014-02-13T01:50:22.120 回答