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