iOS 11:"adjustedContentInset" 标题栏变大时滚动到顶部?
iOS 11: Scroll to top when "adjustedContentInset" changes with larger title bars?
我注意到此代码在 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"?
目前确实没有办法用iOS11做到这一点,我听说了。这样做的唯一方法是捕获初始值并在 navigation/view 控制器的生命周期内存储它。
如果我听到其他消息,我会相应地更新我的答案,但不幸的是,它会在基础 iOS 11 版本中永远被破坏。
我在 iOS 11 中遇到了同样的大标题问题,下面的代码对我有用。
以下代码首先将偏移量滚动到您想要的位置上方合理的大小。值 -204.666666666667 是将“辅助功能”>“较大的文本”>“较大的辅助功能大小”设置为最高的最高值。我敢肯定这不包括其他可能性,但到目前为止它对我有用。 -CGFloat.greatestFiniteMagnitude否则问题太大。
tableView.setContentOffset(CGPoint(x: 0.0, y: -204.666666666667), animated: false)
现在这将为您返回正确调整后的内容大小。为避免滚动得太高,即留白space,只需使用如下值。
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 或其他),然后重新调整 adjustedContentInset.top 以包括大标题、滚动条等,然后您现在可以根据需要设置内容偏移量。
我注意到此代码在 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"?
目前确实没有办法用iOS11做到这一点,我听说了。这样做的唯一方法是捕获初始值并在 navigation/view 控制器的生命周期内存储它。
如果我听到其他消息,我会相应地更新我的答案,但不幸的是,它会在基础 iOS 11 版本中永远被破坏。
我在 iOS 11 中遇到了同样的大标题问题,下面的代码对我有用。
以下代码首先将偏移量滚动到您想要的位置上方合理的大小。值 -204.666666666667 是将“辅助功能”>“较大的文本”>“较大的辅助功能大小”设置为最高的最高值。我敢肯定这不包括其他可能性,但到目前为止它对我有用。 -CGFloat.greatestFiniteMagnitude否则问题太大。
tableView.setContentOffset(CGPoint(x: 0.0, y: -204.666666666667), animated: false)
现在这将为您返回正确调整后的内容大小。为避免滚动得太高,即留白space,只需使用如下值。
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 或其他),然后重新调整 adjustedContentInset.top 以包括大标题、滚动条等,然后您现在可以根据需要设置内容偏移量。