【发布时间】:2015-02-11 11:21:38
【问题描述】:
我有一个 UIScrollView A(实际上是一个 UICollectionView)填充 UINavigationController B 内的屏幕。控制器 B 的 adjustScrollViewInsets 设置为 true。
我想在用户向上滚动时隐藏导航栏,并在向下滚动时显示它。以下是我的代码:
func scrollViewDidScroll(scrollView: UIScrollView) {
if (self.lastContentOffset < scrollView.contentSize.height - scrollView.frame.size.height && self.lastContentOffset > scrollView.contentOffset.y) {
// dragging down
if self.navigationController!.navigationBarHidden {
self.navigationController?.setNavigationBarHidden(false, animated: true)
}
} else if (self.lastContentOffset > 0 && self.lastContentOffset < scrollView.contentOffset.y) {
// dragging up
if !self.navigationController!.navigationBarHidden {
self.navigationController?.setNavigationBarHidden(true, animated: true)
}
}
self.lastContentOffset = scrollView.contentOffset.y
}
现在的问题是,由于 iPhone 6+ 的屏幕太大,当导航栏被隐藏时,滚动视图 A 的 contentSize 小于它的框架(即全屏框架)。在这种情况下,滚动视图将无法滚动,导航栏将永远不会再返回。
我想手动将 A 的 contentSize 的高度保持为屏幕至少 height + 1,但不知道该怎么做。有人可以帮忙吗?或者提供更好的解决方案?
顺便说一句,我使用的是 iOS 8 和 Swift。
【问题讨论】:
标签: ios objective-c uiscrollview