gpt4 book ai didi

ios - UINavigationBar 上方的自定义状态栏

转载 作者:行者123 更新时间:2023-11-28 07:11:19 25 4
gpt4 key购买 nike

我在 UINavigationBar 上方添加了一个自定义的 20px“状态栏”。当用户拉动刷新时,状态栏将显示“正在刷新...”标签。在正常操作中,默认状态栏会显示,然后我调用 setStatusBarHidden:withAnimation: 淡出默认状态栏并显示其后面的自定义状态栏。

我的问题是,当我隐藏默认状态栏时,导航栏向上移动 20px 并与自定义状态栏重叠!

有什么方法可以强制 UINavigationBar 保持在同一个位置吗?

最佳答案

好的!所以解决方案(如 Ryan 建议的那样)是创建一个 UIWindow 并设置:

self.overlayWindow.windowLevel = UIWindowLevelStatusBar;

这将创建一个位于状态栏上方的窗口。我没有意识到您可以同时显示多个 UIWindows。这是一个非常优雅的解决方案。

一些问题:

  • 设置self.overlayWindow.hidden = NO。默认隐藏新窗口。
  • 不需要为新窗口设置 Root View Controller 。
  • 不需要调用makeKeyAndVisible...设置self.overlayWindow.hidden = NO就足够了。
  • 您可以将 UIView subview 直接添加到 UIWindow
  • 您必须保持对 self.overlayWindow 的强引用。如果它被释放,UIWindow 将消失(因为它没有作为 subview 添加或保留在其他任何地方):

    @property (nonatomic, strong) UIWindow *overlayWindow;
  • 适应轮换可能需要一些额外的工作。

我玩得很开心,创建了一个子类 UIWindow 并封装了设置。在 Swift 中:

class StatusBarOverlay: UIWindow {

init(frame: CGRect) {
super.init(frame: frame)

self.windowLevel = UIWindowLevelStatusBar
self.hidden = false
self.userInteractionEnabled = false
}
}

关于ios - UINavigationBar 上方的自定义状态栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28330332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com