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 търси нагоре в йерархията на контролера за изглед, докато контролерът за изглед предостави контекст на презентация. Ако нито един контролер на изглед не предлага да предостави контекст, основният контролер на изглед на прозореца предоставя контекста на представяне.

Ако контролерът на изглед върне ДА, тогава той предоставя контекст на представяне. Частта от прозореца, покрита от изгледа на контролера за изглед, определя размера на представения изглед на контролера за изглед. Стойността по подразбиране за това свойство е НЕ.

Като зададете definesPresentationContext на YES, вие гарантирате, че контролерът, който ще бъде представен, е представен в границите на оригиналния контролер за изглед.

person Daniel Lyon    schedule 18.08.2018