Используя часть ответа @omarzi, я смог заставить его работать, комбинируя его с этим SO Ответом
Как сказал Омарци, мне нужно было создать переменную для отслеживания листа действий:
var actionSheet: UIAlertController?
Затем в моей функции logOut()
я инициализировал ее для созданного там листа действий:
fileprivate func logOut(){
self.actionSheet = UIAlertController(title: nil, message: "Are you sure you want to log out?", preferredStyle: .actionSheet)
//... everything else
Наконец, я использовал ответ SO, с которым я столкнулся выше, который, как и предложение Омарци, предлагал обновить кадр при повороте устройства, но вместо этого в ответе было сказано обновить его в viewDidLayoutSubviews()
примерно так:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if let window = UIApplication.shared.keyWindow{
actionSheet?.popoverPresentationController?.sourceRect = CGRect(x: window.bounds.midX, y: window.bounds.midY, width: 0, height: 0)
}
}
Ответ Омарци направил меня в правильном направлении. Я не выбрал его как правильный ответ, потому что когда я объявил переменную actionSheet
как weak
и когда я попытался инициализировать ее в функции logOut()
, переменная actionSheet осталась nil
и не инициализировалась. Также, когда я попробовал override
на функции viewWillTransition
, я получил сообщение об ошибке "
Метод не переопределяет любой метод из своего суперкласса "
Когда я удалил override
из viewWillTransition
, он не был вызван.
Я не принял ее / его ответ в качестве принятого ответа из-за проблем, которые у меня были, но я выразил ей / ей признательность за то, что направил меня в правильном направлении. Спасибо, Омарци!