我注意到此代码在iOS 11上运行不正常,因为“ adjustedContentInset ”属性值会随着“ navigationBar ”在滚动期间缩小而更改:
CGFloat contentInsetTop=[scrollView contentInset].top;
if (@available(iOS 11.0, *))
{
contentInsetTop=[scrollView adjustedContentInset].top;
}
////
[scrollView setContentOffset:CGPointMake(0, -contentInsetTop) animated:YES];
...例如,这可能从140
开始,然后减少到88
超出最小滚动偏移量。这意味着如果你调用它,它实际上并不会一直滚动到顶部。
除了从UIScrollView
加载时保留内存中的原始偏移量之外,有没有办法在以后恢复此值以确保它确实始终滚动到顶部,无论“ adjustedContentInset < /强>“
答案 0 :(得分:1)
目前,我听说过iOS 11确实无法做到这一点。唯一的方法是捕获初始值并将其存储在导航/视图控制器的生命周期中。
如果我没有听到,我会相应地更新我的答案,但不幸的是,它将永远在基础iOS 11版本中被打破。
答案 1 :(得分:0)
iOS 11中的大标题也遇到了同样的问题,以下代码对我有用。
以下代码首先将偏移量滚动到您想要的合理大小之上。值-204.666666666667是设置辅助功能&gt;的最高值。更大的文字&gt;更大的可访问性大小到最高。我确定这并没有涵盖其他可能性,但到目前为止它对我有用。 -CGFloat.greatestFiniteMagnitude在其他方面也有问题。
tableView.setContentOffset(CGPoint(x: 0.0, y: -204.666666666667), animated: false)
现在可以返回正确的调整内容大小。为了避免滚得太高,即留下空格,只需使用如下的值。
var contentOffset = CGPoint.zero // Just setting a variable we can change as needed below, as per iOS version.
if #available(iOS 11, *) {
contentOffset = CGPoint(x: 0.0, y: -tableView.adjustedContentInset.top)
} else {
contentOffset = CGPoint(x: 0.0, y: -tableView.contentInset.top)
}
tableView.setContentOffset(contentOffset, animated: false)
总之,首先将偏移设置为高(在我的情况下为-204.666666666667,或者仅为-300或其他),然后重新调整adjustContentInset.top以包括大标题,滚动条等,然后您现在可以设置根据需要偏移内容。