Yeni iOS 13 Kalıcı Sunum: Denetleyiciyi Sunma Aşağı Gitmiyor


11

İOS 13'te UIViewControllers'ı modal olarak sunarken garip bir davranışım var. İOS 13'ün tamamında gördüğüm yeni sunum stili şöyle:

Sunulan görünüm denetleyicisi, sunulan görünüm denetleyicisinin arkasında görünür. Ayrıca bir "yığını" taklit etmek için aşağı kaydırılır

Sunulan görünüm denetleyicisi, sunulan görünüm denetleyicisinin arkasında görünür.  Ayrıca bir "yığını" taklit etmek için aşağı kaydırılır

Bu arada, uygulamam aracılığıyla görünüm denetleyicilerini sunarken, bu etkiyi almaya devam ediyorum:

Yeni bir görünüm denetleyicisi sunarken sunan görünüm denetleyicisi hiç hareket etmiyor

Yeni bir görünüm denetleyicisi sunarken sunan görünüm denetleyicisi hiç hareket etmiyor

Bu kodu bu görünüm denetleyicisi sunmak için kullanın:

let controller = storyboard?.instantiateViewController(withIdentifier: "tutorial") as! TutorialController
controller.modalPresentationStyle = .pageSheet
controller.modalTransitionStyle = .coverVertical
present(controller, animated: true, completion: nil)

Benim sorum: Bunun neden olduğunu merak ediyorum ve normal iOS 13 tarzında (mevcut görünüm denetleyicisi geri hareket ederken) görünüm denetleyicilerini sunmanın bir yolu olup olmadığını merak ediyorum.

Şimdiden teşekkürler!


Bir test olarak, controller.modalTransitionStyle = .coverVerticalve (hatta controller.modalPresentationStyle = .pageSheetbu kod bir iPad'de çalıştırılırsa sunum tarzı gerekli olsa da) yorum yapmayı deneyin .
rmaddy

Ben bunu yorumladı ama hiçbir şey değişmez :(
CentrumGuy

Yanıtlar:


3

Sorunun benim görünüm denetleyici hiyerarşim olduğu ortaya çıktı. Sunum görünümü denetleyicisini uygulamamın kök görünümü denetleyicisi yaparak düzeltebildim. Önce arka plan denetleyicisini çağırarak kök görünüm denetleyicisi olarak ayarladım

window.rootViewController = self

ve sonra önceki kodumu kullanarak

let controller = storyboard?.instantiateViewController(withIdentifier: "tutorial") as! TutorialController
controller.modalPresentationStyle = .pageSheet
controller.modalTransitionStyle = .coverVertical
present(controller, animated: true, completion: nil)

Görüntü denetleyicisini sundum. Yardım etmeye çalışan herkese teşekkürler!


Aynı sorunu yaşıyorum. RootViewController bayrağını nerede ayarladınız? Segue'ten hemen önce mi?
Paweł Zgoda-Ferchmin

"Arka plan denetleyicisi" ni sunduğumda ayarladım. İşleri kolaylaştırmak için onlara 1, 2 ve 3 denetleyicileri diyelim (1 arkada en uzak, 2 3'ün arkasındaki arka planda ve 3 önden biri olan Öğretici Denetleyici). Şu anda denetleyici 1'e bakıyoruz. Denetleyici 1'de denetleyici 2'yi sunmak için denetleyici 2'yi çağırmak yerine, denetleyici 2'yi kök görünüm denetleyicisi olarak ayarladım. Bu temel olarak kontrolör 1'den kurtulur ve penceremiz artık sadece hiyerarşisinde kontrolör 2'ye sahiptir. Şimdi, denetleyici 2'yi denetleyici 2'de present () öğesini çağırarak normal şekilde sunabilirsiniz.
CentrumGuy

Tabii, bu benim için çalışıyor ama segue sırasında durum çubuğu veya animasyon kesme gibi çeşitli farklı sorunlara neden olur, ayrıca güvenli olduğunu düşünmüyorum. Bunun için daha iyi bir çözüm olmalı ...
Paweł Zgoda-Ferchmin

Bu sorunlar ne zaman ortaya çıkar? Present () öğesini çağırdığınızda veya kök görünüm denetleyicisini ayarladığınızda? Kaybolan durum çubuğu, durum çubuğunun siyah metinde olması ve present () oluştuğunda uygulamanın arka planıyla karışmasına neden olan siyah bir arka plan üzerinde görünmesi olabilir.
CentrumGuy

1
Basit bir demo projesi oluşturdum. Buradan bakabilirsiniz: github . Tüm mantık Controller1.swift dizinindedir. Bunun yardımcı olup olmadığını bana bildirin!
CentrumGuy

1

Ben sorun vc.modalPresentationStyle = .fullScreenUINavigationController yoksa kullanarak çözülebilir , aksi takdirde aşağıdaki gibi bu kodları kullanabilirsiniz düşünüyorum:

let navigationController = UINavigationController(rootViewController: vc) 
navigationController.modalPresentationStyle = .fullScreen 
present(vc, animated: true)

çünkü iOS 13 ile bu, Apple'ın Görünüm Denetleyicilerinin varsayılan sunum stilini iOS 12'de tam ekrandan kalıcı bir sayfa olarak değiştirdiği yeni bir özelliktir.


2
.fullScreen, arkasındaki denetleyiciyi hiç göremediğiniz eski iOS 12 sunumuna benziyor. Ben bunu istemiyorum.
CentrumGuy

@CentrumGuy, " medium.com/better-programming/… " bağlantısını görebilirsiniz . Ayrıntılı olarak açıklanmıştır.
Apple varsayılan

1
Apple'ın iOS 13'te varsayılan sunum stilini değiştirdiğini biliyorum. Ancak, görünüm denetleyicileri uygulamamda sunduğumda, sunum denetleyicisi iOS 13'te her yerde olduğu gibi hareket etmiyor. Birinci ve ikinci arasındaki farka bakabilirsiniz. sunan görünüm denetleyicisinin en üst görüntü denetleyicisinin arkasında görüntülenme şeklindeki resimler. İlk resimdeki gibi benimkini göstermek istiyorum
CentrumGuy

Yardımcı olabileceğim için mutluyum!
glotcha

1

Programlı:

let vc = UIViewController()
vc.modalPresentationStyle = .fullScreen //or .overFullScreen for transparency
self.present(vc, animated: true, completion: nil)

Film şeridinden:

resim açıklamasını buraya girin

Bu kadar. Kök denetleyici veya pencere ile oynamaya gerek yok.

Referans için bu makaleyi ziyaret edin .


0

Bunu Müfettiş Araç Çubuğu'ndan değiştirebiliriz. Bunu başarmak için: Inspector Tollbar'ın beşinci bölümüne gidin ve daha sonra Sunum alanını Tam Ekran olarak değiştirin.


-1

Bu, ayarlamanız gereken tek özellik olmalıdır

presentedViewController.modalPresentationStyle = .automatic

Ayrıntılı https://developer.apple.com/videos/play/wwdc2019/224/


Otomatik olarak ayarlamak bu sorunu çözmüyor gibi görünüyor
CentrumGuy

Ön plan görünüm denetleyicisinin arkasındaki görünüm denetleyicisi, "mevcut" olarak adlandırdığım denetleyicidir. (Kontrolörün arkasında görebileceğiniz tür)
CentrumGuy

kök bu mu? window.rootViewController'ı kontrol edebilirsiniz
glotcha
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.