Элементы управления не тускнеют, когда контроллер представления представлен локально и отображается предупреждение - PullRequest
2 голосов
/ 02 июня 2019

Когда я представляю UIAlertController на контроллере вида, элементы управления тускнеют, как и ожидалось.

image

However, if the same view controller is itself modally presented, the display of the alert controller does not dim the controls (the two buttons remain blue).

image

How do I make a presented view controller itself handle presentations correctly, and dim its controls?

Здесь - это небольшой пример проекта. Соответствующий код в MainViewController.swift.

1 Ответ

0 голосов
/ 03 июня 2019

Лучший обходной путь, который у меня есть, - это использование настроенного подкласса UIAlertController для установки tintAdjustmentMode вместе с его анимацией появления / исчезновения, используя transitionCoordinator:

/// A `UIAlertController` that can udpates its presenting view controller's `tintAdjustmentMode` code as it appears and disappears
class TintAdjustingAlertController: UIAlertController {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        animatePresentingViewTintAdjustmentMode(tintAdjustmentMode: .dimmed, forViewControllerAtKey: .from)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        animatePresentingViewTintAdjustmentMode(tintAdjustmentMode: .automatic, forViewControllerAtKey: .to)
    }

    private func animatePresentingViewTintAdjustmentMode(tintAdjustmentMode mode: UIView.TintAdjustmentMode, forViewControllerAtKey key: UITransitionContextViewControllerKey) {
        transitionCoordinator?.animate(alongsideTransition: { context in
            if let presentingNavigationController = context.viewController(forKey: key) as? UINavigationController {
                presentingNavigationController.navigationBar.tintAdjustmentMode = mode
                presentingNavigationController.viewControllers.forEach { $0.view.tintAdjustmentMode = mode }
            } else if let presentingViewController = context.viewController(forKey: key) {
                presentingViewController.view.tintAdjustmentMode = mode
            }
            }, completion: nil)
    }
}

Это работает,но я надеюсь, что не придется перетекать это по всему моему коду.Хотелось бы знать, а) есть ли простой способ сделать эту работу, как ожидалось, или б) если это действительно ошибка iOS, есть ли более элегантный обходной путь?

Я также представил радардля этого: http://www.openradar.me/radar?id=6113750608248832

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...