如何在swift3中将navigationBar的barPosition更改为topAttached

tal*_*alt 8 ios swift swift3

我需要将 navController 的 navBar 的 barPosition 更改为 topAttached 类型。我尝试使用UINavigationBarDelegate 的position(for bar:)方法。在 MyViewController 类中:

navigationController?.navigationBar.delegate = self
Run Code Online (Sandbox Code Playgroud)

并延伸:

extension MyViewController: UINavigationBarDelegate{
    func position(for bar: UIBarPositioning) -> UIBarPosition {
        return .topAttached
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在控制器管理的 UINavigationBar 上手动设置委托。”

那么还有其他方法可以改变 swift 3 中的 barPosition 吗?提前致谢!

SNa*_*ula -1

NavigationBar.position是一个readonly属性。你无法改变它。如果你想改变导航栏的框架。首先更改 UINavigationController 的框架,然后更改其中的栏。

例子:

如果你想将其向下移动:

    self.navigationController?.view.frame = CGRect(x: 0.0, y: 100.0, width: 320.0, height: 426.0)
    self.navigationController?.navigationBar.frame = CGRect(x: 0.0, y: 0.0, width: 320.0, height: 44.0)
Run Code Online (Sandbox Code Playgroud)