我有一个 UIScrollView A(实际上是一个 UICollectionView)在 UINavigationController B 中填充屏幕。 Controller 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+的屏幕太大,当导航栏隐藏时, ScrollView A的contentSize小于它的frame(即全屏frame)。在这种情况下, ScrollView 将无法滚动,导航栏将永远不会再次返回。
我想手动保持 A 的 contentSize 到屏幕的高度至少为 height + 1,但不知道该怎么做。有人能帮忙吗?或者提供更好的解决方案?
顺便说一句,我使用的是 iOS 8 和 Swift。
最佳答案
假设您需要将 ScrollView 的最小内容大小保持为 100(当然这将是动态的并且会因设备而异)
NSInteger minScrollViewContentHeight = 100;
用内容填充 ScrollView 后,您需要检查 ScrollView 的内容大小是否小于所需的最小 ScrollView 内容大小。如果它小于所需的内容大小,则需要按如下方式设置 ScrollView 的最小内容大小 -
if(scrollView.contentSize.height < minScrollViewContentHeight)
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, minScrollViewContentHeight)];
关于ios - 如何保持 UIScrollView 内容大小的最小高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28453072/