ios - 为什么将 `hidesBottomBarWhenPushed` 设置为 YES 并使用半透明导航栏刹车插入动画?

标签 ios uinavigationcontroller uitabbarcontroller

我有一个我认为相当常见的设置,但我看到了一个非常奇怪的动画问题。

Storyboard

标签栏内有一个导航 Controller 。如果我按下那个导航 Controller ,我仍然可以在推送动画期间在导航栏中看到前一个 viewController 的红色 View ,但只有当我在目标 viewController 上将 hidesBottomBarWhenPushed 设置为 yes 时(在非常正确的)。这是问题的简化示例,它都可以在 Storyboard中设置。

这是过渡动画。观看导航栏。您可以在背景中看到之前的红色 View Controller ,部分离开屏幕,然后在最后消失。

有人解决过这个问题吗?我在做不受支持的事情吗?这是一个错误吗?我绝对想保持半透明栏并在推送时隐藏标签栏,但我愿意接受以其他支持半透明标签栏的方式可靠地隐藏标签栏的方法。

Animation

最佳答案

这是我目前发现的:

#1 右上角条为黑色

顶部栏右上角模糊的黑色部分是UIWindow半透明背后UINavigationbar , 与 backgroundColor默认为 blackColor .

屏幕截图通过将推送 View 的背景设置为 clearColor 来演示这一点.

enter image description here

作为解决方法,设置 UIWindowbackgroundColor只要您还拥有 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 方法中)。

enter image description here

确保您也在使用后退按钮弹出 View 时测试动画行为。

关于ios - 为什么将 `hidesBottomBarWhenPushed` 设置为 YES 并使用半透明导航栏刹车插入动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28245061/

相关文章:

ios - 自定义 ProgressView

ios - 状态栏下的 Swift 导航栏

ios - TabBarController - 第一个 View 偏移 20px

iphone - 从后台更新 plist

ios - 使用核心数据从文本字段中保存和检索数据

ios - NavigationBar barTintColor 显示相同颜色的不同效果

ios - 无法将图像设置为 UINavigationBar 的 rightTabBarItem

xcode4 - 启动应用程序时设置 UITabBarController Items 标题

ios - UITabBarController 的 TabBar 阻塞了由它托管的 UINavigationController 推送的 UIViewController

ios - 导航和标签栏下的 UIView