Вот что я пытаюсь сделать:
Когда пользователь нажимает кнопку на текущем контроллере представления - я хочу представить UIView, который занимает весь экран - строку состояния и все остальное - и лежит поверх текущего стека контроллера представления. Вплоть до iOS 13 я делал это следующим образом:
var mainWindow = UIApplication.shared.keyWindow
mainWindow!.addSubview(self.temp_view2!
leadingConstraint = NSLayoutConstraint(item: temp_view2, attribute: NSLayoutConstraint.Attribute.leading, relatedBy: NSLayoutConstraint.Relation.equal, toItem: mainWindow, attribute: NSLayoutConstraint.Attribute.leading, multiplier: 1, constant: 0)
trailingConstraint = NSLayoutConstraint(item: temp_view2, attribute: NSLayoutConstraint.Attribute.trailing, relatedBy: NSLayoutConstraint.Relation.equal, toItem: mainWindow, attribute: NSLayoutConstraint.Attribute.trailing, multiplier: 1, constant: 0)
topConstraint = NSLayoutConstraint(item: temp_view2, attribute: NSLayoutConstraint.Attribute.top, relatedBy: NSLayoutConstraint.Relation.equal, toItem: mainWindow, attribute: NSLayoutConstraint.Attribute.top, multiplier: 1, constant: 0)
bottomConstraint = NSLayoutConstraint(item: temp_view2, attribute: NSLayoutConstraint.Attribute.bottom, relatedBy: NSLayoutConstraint.Relation.equal, toItem: mainWindow, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1, constant: 0)
mainWindow?.addConstraints([topConstraint!, bottomConstraint!, leadingConstraint!, trailingConstraint!])
Этот подход, кажется, не работает в iOS 13, я думаю, из-за того, как работают UIWindow и UIScenes - которого у меня пока нет полного понимания. Я использую только одно окно в моем приложении. Используя это сообщение SO Как решить: «keyWindow» устарело в iOS 13.0 Я пытался посмотреть, будет ли работать следующее:
let keyWindow = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
keyWindow?.addSubview(self.temp_view2!)
leadingConstraint = NSLayoutConstraint(item: temp_view2, attribute: NSLayoutConstraint.Attribute.leading, relatedBy: NSLayoutConstraint.Relation.equal, toItem: keyWindow, attribute: NSLayoutConstraint.Attribute.leading, multiplier: 1, constant: 0)
trailingConstraint = NSLayoutConstraint(item: temp_view2, attribute: NSLayoutConstraint.Attribute.trailing, relatedBy: NSLayoutConstraint.Relation.equal, toItem: keyWindow, attribute: NSLayoutConstraint.Attribute.trailing, multiplier: 1, constant: 0)
topConstraint = NSLayoutConstraint(item: temp_view2, attribute: NSLayoutConstraint.Attribute.top, relatedBy: NSLayoutConstraint.Relation.equal, toItem: keyWindow, attribute: NSLayoutConstraint.Attribute.top, multiplier: 1, constant: 0)
bottomConstraint = NSLayoutConstraint(item: temp_view2, attribute: NSLayoutConstraint.Attribute.bottom, relatedBy: NSLayoutConstraint.Relation.equal, toItem: keyWindow, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1, constant: 0)
keyWindow?.addConstraints([topConstraint!, bottomConstraint!, leadingConstraint!, trailingConstraint!])
Представление добавляется, но оно полностью сзади, за root контроллером представления, я добавил строку takeSubviewToFront, но это тоже не помогает. Вот как это выглядит - на самом деле есть 3 вида, которые я добавляю, как описано выше:
Как я могу сделать это для> = iOS 13?