Ios NavigationController返回按钮在加载视图后才出现

Ios NavigationController返回按钮在加载视图后才出现,ios,xcode,swift,uinavigationbar,Ios,Xcode,Swift,Uinavigationbar,我有两个视图控制器,第一个嵌入在导航控制器中。第一个视图上的一个按钮将第二个按钮推到导航堆栈上。伟大的除了“后退”按钮仅在第二个视图在窗口中完全完成动画制作时出现。这很好,除非该视图的标题立即显示: 这造成了一个奇怪的差异,一个元素立即出现,另一个元素随后突然出现。有没有办法让后退按钮立即出现?我正在使用自定义按钮,顺便说一句: let backButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plai

我有两个视图控制器,第一个嵌入在导航控制器中。第一个视图上的一个按钮将第二个按钮推到导航堆栈上。伟大的除了“后退”按钮仅在第二个视图在窗口中完全完成动画制作时出现。这很好,除非该视图的标题立即显示:

这造成了一个奇怪的差异,一个元素立即出现,另一个元素随后突然出现。有没有办法让后退按钮立即出现?我正在使用自定义按钮,顺便说一句:

let backButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: nil)

navigationItem.backBarButtonItem = backButton

在不了解更多细节的情况下,我不确定你描述的行为背后的原因。不过,我将尝试给出如何设置此类转换的想法。因为你在一个故事板上工作,所以这很简单

在故事板中,您将从嵌入导航控制器的视图控制器和要转换到的第二个视图控制器开始。控制从第一个VC的按钮到第二个VC场景的拖动,并选择一个“显示”动作序列,这将导致导航按钮转换-我认为这是您配置故事板的方式

您可以直接在故事板中更改后退按钮标题。选择第一个VC场景,并从左侧的文档大纲中选择其导航项对象。在右边的属性检查器中,只需将“后退按钮”字段更改为在按下第二个VC时按钮所要显示的内容。这将保留用户期望的后退箭头图标

如果要使用按键转换,但显示外观正常的按钮,而不显示箭头,则可以在第二个VC的
viewDidLoad()
中隐藏后退按钮:

然后,回到你的故事板,拖出一个栏按钮项目到你的第二个VC导航栏的左侧,并给它一个自定义标题等


然而,对于这个设置,您真正想要的是一个模式转换,这样做就像在情节提要中将segue类型更改为“以模式呈现”一样简单。这将在导航堆栈上方显示第二个VC,因此默认情况下不会显示导航栏。与其从“对象”面板中拖出一个独立的导航栏(这会让你在状态栏下扩展时感到头疼),不如将你的第二个VC嵌入到它自己的导航控制器中,它会隐式地添加一个导航栏。然后,您可以将一个条形按钮项拖到条形图的左侧,并通过展开序列将其连接起来,或者使用
iAction
方法调用
presentingViewController?。dismissViewControllerAnimated(uu2;:completion:)

此处需要更多信息。您是如何执行转换的(segue连接在storyboard/
PerformsgueWithIdentifier(:)
/
pushViewController(::animated:)
)?您在哪里(代码中)设置了
backBarButtonItem
?在我的简短测试中,我只能得到您在
viewdide(:)
中设置
leftBarButtonItem
时描述的行为。此外,您描述的UI在iOS中有些不习惯。推送转换后,用户通常会看到一个返回箭头,其中包含描述上一屏幕的文本。您的设置(左侧有一个
Cancel
按钮)看起来更像是一个模式演示。当然,我不知道你的应用程序的UI的完整流程,但我认为值得一提,以防它有所帮助。是的,我正在研究如何使它更像一个从底部向上滑动,然后在取消幻灯片上向下滑动的模式。然而,为了理解正常的按键转换发生了什么,我试图找出在这个场景中没有立即显示的后退按钮。至于我如何执行转换,简单的按钮通过故事板切换到第二个视图。我正在第一个视图控制器中创建自定义后退按钮,但即使使用默认按钮,问题仍然存在,尽管出于任何原因,它开始稍早淡入第一个视图控制器中,您在
prepareforsgue(u:sender:)
中的何处创建后退按钮?我正在努力重现这个问题。嗯,没关系。我把它改成模态。你能不能告诉我,我不应该用导航控制器,对吧?所以我会创建一个带有取消按钮的自定义顶部栏等等?如果是这样,那应该是一个导航栏还是仅仅是一个视图?谢谢。这是一个解释。我修复了我的故事板,现在它工作了
navigationItem.hidesBackButton = true