导航栏下拉菜单上的iOS 11-栏的高度更改?

导航栏下拉菜单上的iOS 11-栏的高度更改?,ios,swift,uikit,uinavigationbar,uipangesturerecognizer,Ios,Swift,Uikit,Uinavigationbar,Uipangesturerecognizer,我想做的事情:我想使用平移手势识别器将viewController的整个视图向下拖动,以关闭到父viewController 问题:向下拖动视图时,导航栏会降低其高度,看起来不太好。当视图返回其原始位置时,导航栏将返回默认大小。我希望导航栏保持其大小。我还尝试使用新的大标题和navigationController/-bar的一些其他属性,但这并没有解决问题。 注意:在iOS 11之前,一切正常。 我的代码: override func viewDidLoad() { super.vi

我想做的事情:我想使用平移手势识别器将viewController的整个视图向下拖动,以关闭到父viewController

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

我的代码:

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:

有人知道如何解决这个问题吗?提前谢谢

我希望导航栏保持其大小

它保持着它的大小。如果在拖动之前、期间和之后检查导航栏的边界大小高度,您将看到它始终保持不变(可能为44)。正在更改的是使导航栏的图形向上延伸到状态栏后面的图形扩展。当你把整个东西从屏幕的顶部拉开时,它就不能这样做了,因为它已经不在状态栏旁边的顶部了。iOS 11在执行此绘图扩展的方式上更为严格,可能是因为它必须在iPhone X上以特殊的方式执行此操作

因此,让我们确保您的操作正确:

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

  • 确保导航栏中有一个从
    位置(forBar:)
    返回
    .topAttached
    的委托


如果你正在做这两件事,但都没有用,你就必须完全用另一种方式来实现它。在没有自定义父视图控制器的情况下,让视图像这样直接拖动始终是可疑的

当UINavigationController连接到顶部时,系统将在导航背景中添加安全区域顶部边距

(注意:当偏移值介于1和0之间时,背景边距不会更改)

因此,您必须通过处理手势偏移来处理附加/分离的顶部事件,以更改右侧偏移和内容插入

您可以在我的lib示例中尝试解决方案。;) 我的示例包括UINavigationController中的UITableViewController,因此它将相对复杂


谢谢,我会试试的。你是对的,像这样毫无意义。但这只是一个测试项目,以显示问题。在我的实际项目中,我使用它将viewController解除为父viewController,但问题是相同的。我想那没关系,不是吗?我就是没法让它工作。我决定放弃将整个视图向下拖动的想法,而是在导航栏中使用了一个uibarbuttonite。请直接在这里发布您的答案,而不是只提供指向将来可能无法访问的项目的链接。