我在UINavigationBar上方添加了一个自定义的20px'状态栏'。当用户拉动刷新时,状态栏将显示“刷新...”标签。在正常操作中,将显示默认状态栏,然后我调用setStatusBarHidden:withAnimation:
淡出默认状态栏并显示其后面的自定义状态栏。
我的问题是,当我隐藏默认状态栏时,导航栏向上移动20px并重叠自定义状态栏!
有没有办法强迫UINavigationBar留在同一个地方?
答案 0 :(得分:1)
好的!所以解决方案(正如Ryan建议的那样)是创建UIWindow并设置:
self.overlayWindow.windowLevel = UIWindowLevelStatusBar;
这将创建一个位于状态栏上方的窗口。我没有意识到你可以在任何时候显示多个UIWindows。这是一个令人难以置信的优雅解决方案。
一些问题:
self.overlayWindow.hidden = NO
。默认情况下隐藏新窗口。makeKeyAndVisible
...设置self.overlayWindow.hidden = NO
就足够了。UIView
个子视图直接添加到UIWindow
。您必须强烈引用self.overlayWindow
。如果它被释放,UIWindow
将消失(因为它没有作为子视图添加或保留在其他任何地方):
@property (nonatomic, strong) UIWindow *overlayWindow;
我有一点乐趣并创建了一个子类UIWindow
的类并封装了设置。在斯威夫特:
class StatusBarOverlay: UIWindow {
init(frame: CGRect) {
super.init(frame: frame)
self.windowLevel = UIWindowLevelStatusBar
self.hidden = false
self.userInteractionEnabled = false
}
}