在根视图上显示另一个视图时,警报视图中心会发生变化

时间:2018-10-04 06:02:00

标签: ios swift swift4 ios12

在应用中,当没有互联网连接时,我会显示警报(在根视图控制器上显示)。该应用程序上也有一个Biometric authentication。因此,每当alertview顶部出现生物特征页面(生物特征页面也显示在根视图控制器上)并将其从视图中删除时,警报视图约束都会更改,并且不会显示在中间。

步骤1:-

显示错误消息

enter image description here

显示警报代码:-

  func showAlert(title:String, message: String, buttons: [UIAlertAction]) {
    // create the alert
    self.alert.title = title
    self.alert.message = message

    // add an action (button)
    if buttons.count == 0 {
        self.alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
    } else {
        for i in 0...buttons.count-1 {
            self.alert.addAction(buttons[i])
        }
    }
    self.viewController.present(alert, animated: true, completion: nil)
}

步骤2:-

退出应用程序并显示生物特征验证视图。

应用代理文件:-

   func applicationDidBecomeActive(_ application: UIApplication) {

    if self.userToken != "" && self.biometricStatus && !UserAccessTemp.isBiometricActive {

        let controller = BiometricCheckViewController.instantiate(fromAppStoryboard: .BiometricCheck)
        if let window = self.window, let rootViewController = window.rootViewController {
            var currentController = rootViewController
            while let presentedController = currentController.presentedViewController {
                currentController = presentedController
            }
            currentController.present(controller, animated: true, completion: nil)
        }

    }

enter image description here

步骤3:-

关闭生物特征验证视图后,警报视图的对齐方式发生变化

enter image description here

那么在关闭生物特征视图后如何重新设置警报视图的中心?

2 个答案:

答案 0 :(得分:0)

只需将makeKeyAndVisible()放入“生物特征”视图,即可解决问题。感谢Deepika的评论。

func applicationDidBecomeActive(_ application: UIApplication) {

    if self.userToken != "" && self.biometricStatus && !UserAccessTemp.isBiometricActive {

        let controller = BiometricCheckViewController.instantiate(fromAppStoryboard: .BiometricCheck)

        let alertWindow = UIWindow(frame: UIScreen.main.bounds)
        alertWindow.rootViewController = UIViewController()
        alertWindow.windowLevel = UIWindowLevelAlert + 1;
        alertWindow.makeKeyAndVisible()
        alertWindow.rootViewController?.present(controller, animated: true, completion: nil)
    }
}

答案 1 :(得分:0)

尝试:

func showAlert(title:String, message: String, buttons: [UIAlertAction]) {
    // create the alert
    self.alert.title = title
    self.alert.message = message

    // add an action (button)
    if buttons.count == 0 {
        self.alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
    } else {
        for i in 0...buttons.count-1 {
            self.alert.addAction(buttons[i])
        }
    }

    if var topController = UIApplication.sharedApplication().keyWindow?.rootViewController {
        while let presentedViewController = topController.presentedViewController {
            topController = presentedViewController
        }

        topController.present(alert, animated: true, completion: nil)
    }
}