ios – 为什么使用半透明导航栏打破push动画将`hidesBottomBarWhenPushed`设置为YES?

我有什么我会认为一个相当普遍的设置,但我看到一个非常奇怪的动画问题.

标签栏内有导航控制器.如果我推动该导航控制器,在推送动画期间,仍然可以在导航栏中看到以前的viewController的红色视图,但是只有当我在目标viewController(在右边)将hideBottomBarWhenPushing设置为yes时,才能看到.这是一个简单的例子,它可以在故事板中设置.

这是一个转换的动画.观看导航栏.您可以在后台看到以前的红色视图控制器,部分关闭屏幕,然后在最后消失.

有人解决了这个问题吗?我在做某些不支持的事情吗?这是一个bug吗?我绝对想要保持半透明的条形图,并且在按下时隐藏标签栏,但是我可以通过其他支持半透明标签栏的方式可靠地隐藏标签栏.

解决方法

这是我到目前为止发现的:

#1右上角是黑色的

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

屏幕截图通过将推送视图的背景设置为clearColor来显示此信息.

作为解决方法,将UIWindow的backgroundColor属性设置为所需的背景颜色会修复此问题,只要您还具有将view设置为.Top的属性edgesForExtendedLayout.

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属性不一定是我们应该做的.也许,未来的iOS版本可以解决这个问题.

#2推动动画结束后,查看内容“向下移动”

如果您有一个底部布局指南和视图“向下移动”的子视图,我还没有找到任何理想的修复.但是,将选项卡栏设置为隐藏有助于某种程度.作为警告和预期,隐藏标签栏也会在推送动画期间立即将其从父视图控制器隐藏(尽管在弹出视图期间动画期间它再次变得可见).

class ViewToPushViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // ...

        self.tabBarController?.tabBar.hidden = true
    }
}

确保ViewToPushViewController的hidesBottomBarWhenPushed属性在被推送之前设置为true(在界面构建器属性检查器中或在父视图控制器中的prepareForSegue方法中).

确保您还用返回按钮弹出视图时测试动画行为.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...