gpt4 book ai didi

iOS - 当 View Controller 以模态方式呈现时,如何将 View 保持在前面?

转载 作者:行者123 更新时间:2023-11-29 05:13:22 26 4
gpt4 key购买 nike

我有一个导航 ViewController,当用户关闭互联网时,我想在所有 ViewController 上添加一个名为 TestView 的自定义 View 。当互联网连接状态发生变化时,我将自定义 View 添加到 keyWindow 中。当我插入 ViewController 时, View 会显示并保持在那里,但是当我以模态方式呈现 ViewController 时,模态 ViewController 会覆盖 View 。

即使 VC 以模态方式呈现,我也希望 View 保留在前面,并且我希望能够在我的 AppDelegate 文件中为所有模态 ViewController 或类似的东西添加一些代码。我怎样才能在 swift 5 中做到这一点?我在想,如果有一个函数每次出现模态 VC 时都会触发,我可以在那里添加我的代码。这是我的 AppDelegate 目前的样子:


class AppDelegate: UIResponder, UIApplicationDelegate, ReachabilityObserverDelegate {
var reachability: Reachability?
var window: UIWindow?
var internetView: TestView?

//This is called when the internet connects or disconnects
func reachabilityChanged(_ isReachable: Bool) {
window = getKEYWindow()
if !isReachable {
window?.addSubview(internetView!)
}
else {
internetView?.removeFromSuperview()
}
}

func getKEYWindow() -> UIWindow? {
return UIApplication.shared.connectedScenes.filter({$0.activationState == .foregroundActive}).map({$0 as? UIWindowScene}).compactMap({$0}).first?.windows.filter({$0.isKeyWindow}).first
}

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

try? addReachabilityObserver()
internetView = TestView(frame: CGRect(x:0, y: 50, width: UIScreen.main.bounds.size.width, height: 14))
return true
}

}

Main ViewController:

Internet Turned Off:

Push ViewController:

Present ViewController Modally:


更新:我找到了另一种方法来保持我的视野在前面。我在 didFinishLaunchingWithOptions 中添加了以下行 internetView.layer.zPosition = .greatestFiniteMagnitude ,它的效果非常好。谢谢大家的帮助。

最佳答案

我可以建议一种方法:

打开一个更高级别的新 UIWindow 并将其绘制在整个应用程序之上。

我不知道这是否是最好的方法,但是我只是在一个空应用程序上使用以下代码进行了测试 - 它似乎有效 - 甚至可以是透明的。

 _myWindow = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; 
[_myWindow makeKeyAndVisible];

UIViewController* dummyVC = [[UIViewController alloc] init];
dummyVC.view = [[UIView alloc]initWithFrame:_myWindow.bounds];
[dummyVC.view setOpaque:NO];
[dummyVC.view setAlpha:0.1f];

[_myWindow setRootViewController:dummyVC];
_myWindow.windowLevel = UIWindowLevelAlert + 1;

[_myWindow.rootViewController.view.layer setBackgroundColor:[UIColor greenColor].CGColor];

关于iOS - 当 View Controller 以模态方式呈现时,如何将 View 保持在前面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59451980/

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