如何在整个应用程序的顶部添加一个 UIView,将每个屏幕设计向下推送

How to add a UIView at top of whole app that pushes every screen design to downward

提问人:Muhammad Wasim 提问时间:2/11/2020 最后编辑:Muhammad Wasim 更新时间:6/23/2021 访问量:188

问:

当互联网不可用时,我打算在应用程序顶部添加一个 UIView。我正在使用这段代码,它也可以正常工作。

let currentWindow: UIWindow? = UIApplication.shared.keyWindow
self.myView = UIView(frame: CGRect(x: 0, y: 0, width: currentWindow?.frame.size.width ?? 620 , height: newSafeArea.bottom + 35))
currentWindow?.addSubview(self.myView)

但是这个代码的主要问题,我想添加它,屏幕也应该向下推,如下图所示。

PS:这将添加到Window对象上,并且需要保留在每个屏幕上。

以前

Before

After

iOS Swift iPhone UIView

评论

1赞 xTwisteDx 2/11/2020
执行此操作的最简单方法是创建视图。限制在视图本身。将其大小设置为需要显示的时间,然后更改其大小。或者,您可以使用堆栈视图并将视图添加到该视图。.zero
0赞 Muhammad Wasim 2/11/2020
它将如何解决下推所有屏幕内容的问题?
0赞 xTwisteDx 2/11/2020
如果您设置了适当的约束,那么它将自身设置为标签的大小。这意味着它会将其余部分向下推。
0赞 Muhammad Wasim 2/11/2020
亲爱的我瘦你不明白这个问题,这个UIView是添加到UIWindow上的吗?= UIApplication.shared.keyWindow,它将保留在每个屏幕上,因为它被添加到 Window 上。这将如何降低 UIViewController 的限制?

答:

0赞 Muzamil 2/14/2020 #1

对此几乎没有解决方法。在网络更改时,您可以简单地将视图顶部约束的常量从 0 调整为所需的警报高度,反之亦然。然后在 App Delegate 中添加警报。

评论

0赞 Muhammad Wasim 2/14/2020
如何调整每个屏幕的约束大小?我在上面已经提到过,我们正在将其添加到 Window,每个 ViewController 都应该相应地调整!
0赞 Muzamil 2/14/2020
这无法操纵关键窗口的框架以降低警报的屏幕。这听起来可能毫无希望,但事实就是如此
0赞 Muhammad Wasim 2/21/2020
感谢您@Muzamil回答,但我想我们仍然可以在不在每个控制器中添加这么多视图的情况下实现这一目标,我想实现这种可重用性和通用代码。让我们希望其他人能有更好的主意。再次感谢您抽出时间接受采访
0赞 user499846 6/23/2021 #2

您可以尝试添加其他安全区域插图

var newSafeArea = UIEdgeInsets()
newSafeArea.top += 50
self.additionalSafeAreaInsets = newSafeArea

如果你需要对所有视图控制器执行此操作,最好的办法是将它们都放在一个超类中的所有子类,然后在横幅视图出现时进行此更新

以下是相关文档 https://developer.apple.com/documentation/uikit/uiview/positioning_content_relative_to_the_safe_area