NavigationController后退按钮直到加载视图后才出现

时间:2015-04-01 18:44:59

标签: ios xcode swift uinavigationbar

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

enter image description here

enter image description here

这会产生一种奇怪的差异,其中一个元素立即出现,另一个元素随后出现。有什么方法可以立即显示后退按钮吗?我使用自定义按钮顺便说一句:

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

navigationItem.backBarButtonItem = backButton

1 个答案:

答案 0 :(得分:3)

在不了解更多细节的情况下,我不确定您所描述的行为背后的原因。但是,我会试着想一下如何设置这些过渡。由于您在故事板中工作,因此非常简单。

在故事板中,您将从导航控制器中嵌入的视图控制器和要转换到的第二个视图控制器开始。控制 - 从第一个VC按钮拖动到第二个VC场景,然后选择"显示" action segue将导致导航推送过渡 - 我认为这是您配置故事板的方式。

您可以直接在故事板中更改后退按钮标题。选择第一个VC场景,然后从左侧的文档轮廓中选择其导航项目对象。在右侧的属性检查器中,只需更改"后退按钮"当你推到第二个VC时按钮要说的任何字段。这将保留用户期望的后退箭头图标。

如果您想使用推送转换但是显示没有箭头的看似正常的按钮,则可以隐藏第二个VC viewDidLoad()中的后退按钮:

navigationItem.hidesBackButton = true

然后,回到故事板中,将一个条形按钮项拖到第二个VC导航栏的左侧,并为其提供自定义标题等。

然而,你真正想要的设置是模态转换,这样做就像将你的segue类型更改为"呈现模态"在故事板中。这将在导航堆栈上方显示第二个VC ,因此默认情况下不会显示导航栏。而不是从对象面板中拖出一个独立的导航栏(这会让你有些头疼,试图让它在状态栏下扩展),而是将第二个VC嵌入到自己的导航控制器中,这将隐式添加一个导航栏。然后,您可以将条形按钮项拖出到条形图的左侧并通过展开segue将其挂起,或使用IBAction方法并调用presentingViewController?.dismissViewControllerAnimated(_:completion:)