我有一个我认为相当常见的设置,但我看到了一个非常奇怪的动画问题。
标签栏内有一个导航 Controller 。如果我按下那个导航 Controller ,我仍然可以在推送动画期间在导航栏中看到前一个 viewController 的红色 View ,但只有当我在目标 viewController 上将 hidesBottomBarWhenPushed
设置为 yes 时(在非常正确的)。这是问题的简化示例,它都可以在 Storyboard中设置。
这是过渡动画。观看导航栏。您可以在背景中看到之前的红色 View Controller ,部分离开屏幕,然后在最后消失。
有人解决过这个问题吗?我在做不受支持的事情吗?这是一个错误吗?我绝对想保持半透明栏并在推送时隐藏标签栏,但我愿意接受以其他支持半透明标签栏的方式可靠地隐藏标签栏的方法。
最佳答案
这是我目前发现的:
#1 右上角条为黑色
顶部栏右上角模糊的黑色部分是UIWindow
半透明背后UINavigationbar
, 与 backgroundColor
默认为 blackColor
.
屏幕截图通过将推送 View 的背景设置为 clearColor
来演示这一点.
作为解决方法,设置 UIWindow
的 backgroundColor
只要您还拥有 edgesForExtendedLayout
属性,将属性设置为所需的背景颜色即可解决此问题。要推送的 View Controller 设置为 .Top
.
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
window?.backgroundColor = UIColor.whiteColor()
return true
}
class ViewToPushViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.edgesForExtendedLayout = UIRectEdge.Top
// Or set it from the Attributes Inspector in IB.
// See screenshot below.
}
}
我认为这是一种解决方法,因为我认为修改 UIWindow 的 backgroundColor 属性不一定是我们应该做的。也许, future 的 iOS 版本可以解决这个问题。
#2 推送动画结束后查看内容“向下移动”
如果您有一个带有底部布局指南的 subview 并且 View “向下移动”,我还没有找到任何理想的修复方法。但是,将标签栏设置为隐藏在一定程度上有所帮助。需要注意的是,正如预期的那样,隐藏选项卡栏也会在推送动画期间立即将其从父 View Controller 中隐藏(尽管在弹出 View 时它会在动画期间再次可见)。
class ViewToPushViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// ...
self.tabBarController?.tabBar.hidden = true
}
}
确保 ViewToPushViewController 的 hidesBottomBarWhenPushed
属性设置为 true
在推送之前(在界面构建器属性检查器中或在父 View Controller 中的 prepareForSegue
方法中)。
确保您也在使用后退按钮弹出 View 时测试动画行为。
关于ios - 为什么将 `hidesBottomBarWhenPushed` 设置为 YES 并使用半透明导航栏刹车插入动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28245061/