modalPresentationStyle .overCurrentContext, вызывающий проблемы с нажатием удаленных кнопок на представленном контроллере представления

У меня проблема с использованием .overCurrentContext modalPresentationStyle на контроллере представления tvOS:

let vc = UIStoryboard(name: "", bundle: Bundle.main).instantiateInitialViewController() //representative of actually presented VC
vc.modalPresentationStyle = .overCurrentContext
present(vc, animated: true, completion: nil)

На представленном контроллере представления нажатие кнопки меню прекращает возврат к представленному контроллеру представления. Это также происходит при установке его на .overFullScreen и .blurOverFullScreen. Однако у меня нет такой проблемы при установке .currentContext или .fullScreen. Есть ли что-то особенное, что нужно использовать при использовании определенных UIModalPresentationStyle?


person Daniel Smith    schedule 17.11.2017    source источник
comment
Какой вид контроллера вы представляете? Я заметил, что это также вызывает проблемы с фокусировкой. Например, фокус возвращается к представленному контроллеру представления, в то время как представленный контроллер представления все еще представлен.   -  person Daniel Storm    schedule 15.08.2018


Ответы (1)


let vc = UIStoryboard(name: "", bundle: Bundle.main).instantiateInitialViewController() //representative of actually presented VC
vc.modalPresentationStyle = .overCurrentContext
self.definesPresentationContext = true //*** adding this line should solve your issue ***
self.present(vc, animated: true, completion: nil)

Так что же здесь происходит? Свойство definesPresentationContext было добавлено в iOS 8, и в документации указано следующее:

Когда представлен контроллер представления, iOS начинает с представления контроллера представления и спрашивает его, хочет ли он предоставить контекст представления. Если контроллер представления представления не предоставляет контекст, то iOS запрашивает родительский контроллер представления представления контроллера представления. iOS выполняет поиск по иерархии контроллера представления до тех пор, пока контроллер представления не предоставит контекст представления. Если ни один контроллер представления не предлагает предоставить контекст, корневой контроллер представления окна предоставляет контекст представления.

Если контроллер представления возвращает YES, то он предоставляет контекст представления. Часть окна, покрытая представлением контроллера представления, определяет размер представленного представления контроллера представления. Значение по умолчанию для этого свойства — НЕТ.

Установив для definesPresentationContext значение YES, вы гарантируете, что представляемый контроллер представлен в границах исходного контроллера представления.

person Daniel Lyon    schedule 18.08.2018