我正在使用 UINavigationController 工具栏。在显示之前,我调整了 View 的大小,以便它们不会被工具栏挡住(我将当前 View Controller View 的框架设置为从 navigationBar 底部到 toolbar 顶部的矩形。

但并非我所有的 View Controller 都有 toolbarItems 。因此,当从具有项目( Controller A)的 View Controller 切换到没有项目( Controller B)的 View Controller 时,我想隐藏工具栏。但是,当我在 B 的 setToolbarHidden:animated: 方法中调用 viewWillAppear:animated: 时,工具栏在推送转换期间向下动画并显示其背后的 UIWindow 背景。

这也发生在相反的方向:当从 B 转换到 A(通过后退按钮)时,我希望工具栏动画以再次显示 A 的 toolbarItems,但由于 A 的 View 没有延伸到屏幕底部, UIWindow 在 pop 转换期间可见。

这可能不是最好的描述,所以这里是一个屏幕截图:

我尝试在其 viewWillDisappear:animated: 方法中更新 A 的框架,但它做了奇怪的事情,因为它似乎在 UINavigationController 推送动画块中被调用。任何见解将不胜感激。

更新 :我尝试将工具栏隐藏在 B 的 viewDidAppear:animated: 中,但结果并不理想。使用此解决方案,在推送转换完成之前,工具栏不会被关闭。由于 B 没有任何 toolbarItems ,A 的项目在转换过程中被推到左边,在它消失之前在屏幕上留下一个空的工具栏。此外,当返回 A 时,UIWindow 背景将可见,除非我将工具栏设置为在 B 的 viewWillDisappear:animated: 中可见,这意味着 B 必须知道 A 有 toolbarItems

最佳答案

也许最好的做法是在 B 的 setToolbarHidden:animated: 中调用 viewDidAppear

或者,您可以在自定义 pushViewController:animated: 子类中的 UINavigationController 方法中将 B 推送到导航 Controller 之前更改 A 的框架。

关于iphone - 使用 UINavigationController setToolbarHidden :animated: 时如何调整 View 大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4796304/

10-13 06:16