您需要注意的是导航控制器管理整个视图层次结构。当您拥有 ViewControllerA 时,您可以在其中更改导航控制器高度的导航栏,然后将 ViewControllerB 推送到该导航控制器的堆栈上,您实际上是在查看同一个导航栏。您需要将高度更改回 ViewControllerB 中的原始高度。
我不确定您所说的“将后退按钮分开并放置在导航栏之前”是什么意思。你有图片或者你能澄清这个问题吗?
更新:根据您的评论,您尝试实现的目标是可能的,但这是一个坏主意。UINavigationController 的 navigationBar 横跨屏幕的整个宽度。无论缩短此栏的宽度以将您的按钮显示在其左侧的技术可行性如何,这都可以说违反了 HIG,这需要标准使用标准 iOS 功能;即导航栏应始终跨越设备在任一方向的宽度。如果您想用不同的按钮替换标准的后退按钮,只需替换 leftNavigationItem 即可,即
self.navigationItem.leftNavigationItem = <SomeUIBarButtonItem>;
您可能还想设置 hidesBackButton = YES。
更新 2:我在一个小型 Xcode 项目中对此进行了测试,您可以更改导航栏的宽度。这看起来很愚蠢,但这是可能的。但是,如果您使用笔尖并在该笔尖上设置 NavigationBar 属性,则当您将按钮添加到视图控制器的视图时,您必须将框架的 y 值设置为负数以使其与导航栏一致. 即使如此,在此按钮上设置文本或目标/操作似乎也不起作用。导航栏可能会为自己保留该宽度。从笔尖中删除导航栏设置并再次尝试仍然没有这样做。导航栏(或者,很可能是导航控制器)的存在似乎阻止了其他任何东西在该区域接收触摸事件。