2017-10-07 88 views
0

我想要的:我想拖动一个viewController的整个视图,使用平移手势识别器关闭父视图控制器。NavigationBar上的iOS 11下拉 - 酒吧的高度变化?

问题:当我向下拖动视图时,导航条会降低其高度并且看起来不太好。当视图返回到原始位置时,navigationBar将返回到默认大小。我想让navigationBar保持其大小。我还尝试使用navigationController/-bar的新大标题和其他一些属性,但这并没有解决问题。 注:一切正常已iOS的前11

Gif navigationBar problem

我的代码:

override func viewDidLoad() { 
    super.viewDidLoad() 
    let panGesture = UIPanGestureRecognizer(target: self, action: #selector(dragViewDown(_:))) 
    navigationController!.view.addGestureRecognizer(panGesture) 
} 

@IBAction func dragViewDown(_ gesture: UIPanGestureRecognizer) { 
    if let dragView = gesture.view { 
     let translation = gesture.translation(in: dragView) 

     dragView.center.y = (dragView.center.y + translation.y) 

     gesture.setTranslation(CGPoint.zero, in: dragView) 
    } 
} 

这个测试项目中只有一个的viewController和不提供解雇,但问题与我的工作项目相同。

我还上传了该项目的GitHub:https://github.com/maddinK7/navitationBar-pull-down-problem

有没有人有一个想法如何解决这个问题?提前致谢。

回答

2

我想要的导航栏留在它的大小

住在它的大小。如果您在拖动之前,之中和之后检查导航栏的边界大小高度,您会发现它始终保持相同(可能为44)。有什么变化是图形扩展导致导航栏的绘图扩展到状态栏的后面。当你将所有东西从屏幕的顶部拉开时,它不能这样做,因为它不再位于状态栏的顶部。 iOS版11将更加严格执行这本图扩展的方式,可能是因为它做在iPhone上的X.

一种特殊的方式那么,让我们确保你这样做正确:

  • 确保导航栏的顶部约束固定在安全区域布局指南的顶部,常量为零。

  • 确保导航栏有一个代表,该代表从position(forBar:)返回.topAttached

如果你正在做这两件事情并且没有帮助,你必须完全用其他方式实现它。使视图可以像这样直接拖动,没有自定义父视图控制器,总是令人怀疑。

+0

谢谢,我会试试看。 你是对的,这是没有意义的。但这只是一个显示问题的测试项目。在我真正的项目中,我使用这个将viewController关闭到父级viewController,但问题是一样的。我认为没关系,不是吗? – Martin

+0

我只是无法让它工作。我决定放弃拖动整个视图的想法,而是在导航栏中使用UIBarButtonItem。 – Martin

-1

当UINavigationController附加到顶部时,系统会在导航背景中添加安全区顶部边距。

(注意:背景当偏移值为1之间和余量不会改变0)

所以,你必须处理由手柄手势偏移改变右偏移和内容附接/拆卸顶部事件插图。

你可以在我的lib例子中试试这个解决方案。 ;) 我的例子包括UINavigationController中的UITableViewController,所以它会比较复杂。

https://github.com/showang/OverlayModalViewController

+0

请直接在此发布您的答案,而不是仅提供某个项目的链接,这些项目未来可能无法访问。 –

+0

虽然这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/18770532) –

+0

对不起,我已经编辑了我的答案。 – Showang