我在导航控制器中嵌入了一个View Controller,并且偏好大标题选项设置为true;在视图控制器里面有一个滚动视图。滚动时缩小标题(不是UITableViewController)iOS 11
我想在滚动时使导航栏缩小。
我该如何归档?
的XCode 9,斯威夫特4,iOS的11
我在导航控制器中嵌入了一个View Controller,并且偏好大标题选项设置为true;在视图控制器里面有一个滚动视图。滚动时缩小标题(不是UITableViewController)iOS 11
我想在滚动时使导航栏缩小。
我该如何归档?
的XCode 9,斯威夫特4,iOS的11
你有没有尝试过这样的事情?当内容向上滚动时,它将转换大标题显示模式。
class P1ViewController: UIViewController, UIScrollViewDelegate
{
var canTransitionToLarge = false
var canTransitionToSmall = true
func scrollViewDidScroll(_ scrollView: UIScrollView)
{
if canTransitionToLarge && scrollView.contentOffset.y <= 0 {
UIView.animate(withDuration: 0.5) {
self.navigationItem.largeTitleDisplayMode = .always
}
canTransitionToLarge = false
canTransitionToSmall = true
}
else if canTransitionToSmall && scrollView.contentOffset.y > 0 {
UIView.animate(withDuration: 0.5) {
self.navigationItem.largeTitleDisplayMode = .never
}
canTransitionToLarge = true
canTransitionToSmall = false
}
}
}
这可以工作,但不是那么顺利,不像使用tableviewcontrollers那样原生 –
我用过的东西,类似于Kamil Szostakowski的答案观点与UICollectionView。
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
UIView.animate(withDuration: 0.5, animations: {
self.navigationController?.navigationBar.prefersLargeTitles = (velocity.y < 0)
})
}
它可能不是那么顺利,但我还没有找到更好的选择呢。
我使用了dsk1306解决方案,参见上文。但在我的情况下,我在UIViewController中有一个大标题的WebView。
所以我不得不设置UIWebView的滚动型代表:
self.webView.scrollView.delegate = self
和
extension MyViewController: UIScrollViewDelegate {
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
if #available(iOS 11.0, *) {
UIView.animate(withDuration: 0.5, animations: {
self.navigationController?.navigationBar.prefersLargeTitles = (velocity.y < 0)
})
}
}
}
尝试这样:
extendedLayoutIncludesOpaqueBars = true
scrollView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(scrollView)
NSLayoutConstraint.activate([
scrollView.topAnchor.constraint(equalTo: view.topAnchor),
scrollView.leftAnchor.constraint(equalTo: view.leftAnchor),
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
scrollView.rightAnchor.constraint(equalTo: view.rightAnchor)
])
我用故事板方法测试,它工作。 确保设置scrollView &它的子视图约束条件。
这里与参考测试样品XCode项目:https://github.com/DazChong/LargeTitleShrinkOnScrollView
您的示例项目根本不起作用 –
https://www.dropbox.com/s/ylsz4uiyvkf8knr/Untitled.mov?dl=0 –
@HabibAli,在您downvote之前,您是否使用过最新的iOS 11.2进行过测试?我在各种设备上进行了测试,确实可以使用新的git clone。 – DazChong
这种方式为我工作。 我遵循这些步骤: 1-将TableView移动到视图控制器场景中的列表顶部(在安全区域下)。 2 - 由FirstViewContoller制作FirstView并加载。
我有类似的问题,则是因为视图控制器内许多UIScrollView
为基础的观点,我是在第一层次不滚动。一旦它只有一个,它可以与UIScrollView
,WKWebView
或UITextView
无任何代码行一起正常工作。
如果你有问题崩溃根目录导航条从提出的VC的scrollView,可以试试这个: 添加UIScrollView到RootVC。重要 - UIScrollView必须是根视图(在索引0处)。 在呈现的VC中,我们可以使用scrollViewDidScroll并在我们的根UIScrollView上设置偏移量。 看到here与GIF和代码 RootVC视图层次: screenshot(对不起,链接,没有足够的声誉)
在presentedVC试试这个
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if #available(iOS 11.0, *) {
let offset = scrollView.contentOffset
rootVC.scrollView.contentOffset = offset
}
}
你的意思是隐藏或正常大小? – user3589771
@ user3589771我的意思是正常大小 –
我不知道。但[请检查此之前](https://medium.com/@PavelGnatyuk/large-title-and-search-in-ios-11-514d5e020cee)尝试使用'UIView'动画和撤消更大的标题? – user3589771