Tocropviewcontroller: Ist safeAreaInsets falsch?

Erstellt am 25. Sept. 2019  ·  14Kommentare  ·  Quelle: TimOliver/TOCropViewController

Danke für die tolle Bibliothek! 👍

Was genau wollen Sie mit dieser Bibliothek erreichen?
Ich habe nur eine Frage. Die Position der Symbolleiste zu weit unten:

Hat es eine falsche safeAreaInsets.bottom?

Benötigen Sie ein reproduzierbares Beispielprojekt? TestSafeArea.zip

bug rfc

Hilfreichster Kommentar

Hallo @zhangao0086! Entschuldigung für die Verspätung!

Endlich hatte ich etwas Freizeit, um zu prüfen, was los war. Es war seltsam, denn selbst auf der Ebene des übergeordneten Containers waren die safeAreaInsets bis auf die Kerbe 0.

Ich glaube, ich habe es aber behoben. Dies war ein weiterer Nebeneffekt der neuen modalen Anzeige von iOS 13. Es stellt sich heraus, wenn Sie modalPresentationStyle auf .fullScreen , scheint der Ansichtscontroller die Einschübe nicht zu befolgen.

Ich habe noch keine neue Pod-Version ausgeliefert (mein CI-Server ist umgefallen, als ich ihn auf Catalina aktualisiert habe. 😅), aber ich habe das Flag .fullScreen zum Master-Zweig hinzugefügt. Kannst du bitte versuchen, vom Meister zu ziehen und zu sehen, ob es jetzt für dich funktioniert?

Die Syntax zum Ziehen vom Master über CocoaPods lautet:

pod 'CropViewController', :git => 'https://github.com/TimOliver/TOCropViewController.git'

Vielen Dank!

Alle 14 Kommentare

@zhangao0086 gleiches Problem hier auf iOS13, auch wenn Sie auf Abbrechen tippen, stürzt die App ab.

Klingeln...

Hi!
Der Grund liegt in einem benutzerdefinierten VC-Übergang von CropViewController. Um dieses Problem zu beheben, müssen wir einige Nachforschungen über Unterschiede in iOS13 im Zusammenhang mit dem Übergang anstellen oder .... einfach deaktivieren :)
Datei: CropViewController.swift, Zeichenfolge: 561.

fileprivate func setUpCropController() {
        addChild(toCropViewController)
        transitioningDelegate = (toCropViewController as! UIViewControllerTransitioningDelegate)
        toCropViewController.delegate = self
        toCropViewController.didMove(toParent: self)
    }

Um einen Standardübergang zu verwenden, können wir diese Zeile kommentieren/entfernen:

transitioningDelegate = (toCropViewController as! UIViewControllerTransitioningDelegate)

Ich glaube nicht, dass dieses Problem allein auf den benutzerdefinierten Übergang zurückzuführen ist. Ich präsentiere den Controller, indem ich ihn von einem UIImagePickerController in einem Popover drücke. Das Popover in iOS 13 enthält den Pfeil in der Ansicht, sodass dieser Controller jetzt denkt, dass er größer ist als er ist und den zusätzlichen Platz für den Pfeil einnimmt. Wenn sich der Pfeil auf der rechten Seite befindet, läuft der Inhalt dieses Controllers auf der rechten Seite aus dem Bildschirm usw. Etwas muss mit sicherem Bereich geändert werden, aber ich bin mir nicht sicher, was dies beheben würde - insbesondere, da dies alles programmgesteuert geschieht und es gibt mehrere Ansichten.

Ich glaube, dass der safeAreaLayoutGuide irgendwie verwendet werden muss, um dies zu beheben. Ich bin gerade den Code durchgegangen und es sieht nicht so aus, als wäre er irgendwo enthalten. Ich wünschte, ich könnte mehr helfen. Hier sind ein paar weitere Stellen, an denen dieses Problem auftritt, die auch einige Möglichkeiten beinhalten, wie es möglicherweise angegangen werden könnte:

https://stackoverflow.com/questions/57988889/ios-13-uipopoverpresentationcontroller-sourceview-content-visible-in-the-arrow

https://stackoverflow.com/questions/57866771/ios-problem-of-display-the-popover-border-in-the-ios13

Wenn dies im aktuellen Code behoben wurde, sehe ich es möglicherweise nicht, da ich Carthage verwende, obwohl ich es gerade überprüft habe und es keine Updates gibt

Gibt es hierzu Neuigkeiten? @TimOliver

Hallo @zhangao0086. Vielen Dank für die umfangreiche Beispiel-App!

Ich bin gerade damit beschäftigt, iOS 13-Brände in einigen meiner anderen Projekte zu löschen, daher hatte ich noch keine Gelegenheit, mir das anzusehen. Es tut uns leid!

Ich werde es mir anschauen, wenn ich kann. In der Zwischenzeit, wenn jemand den Fix findet und eine PR einreichen kann, wäre das sehr dankbar!

Ich habe CropViewController ursprünglich zu einem separaten View-Controller gemacht, da es damals nicht möglich war, die gesamte Objective-C-Schnittstelle von TOCropViewController in Swift zu konvertieren. Aber ich denke, die Interoperabilität hat sich so weit verbessert, dass wir den Wrapper jetzt möglicherweise aufgeben können. Hoffentlich werden solche Probleme in Zukunft vermieden.

@TimOliver Danke für deine Antwort! ich verstehe dich total😃

Hallo @zhangao0086! Entschuldigung für die Verspätung!

Endlich hatte ich etwas Freizeit, um zu prüfen, was los war. Es war seltsam, denn selbst auf der Ebene des übergeordneten Containers waren die safeAreaInsets bis auf die Kerbe 0.

Ich glaube, ich habe es aber behoben. Dies war ein weiterer Nebeneffekt der neuen modalen Anzeige von iOS 13. Es stellt sich heraus, wenn Sie modalPresentationStyle auf .fullScreen , scheint der Ansichtscontroller die Einschübe nicht zu befolgen.

Ich habe noch keine neue Pod-Version ausgeliefert (mein CI-Server ist umgefallen, als ich ihn auf Catalina aktualisiert habe. 😅), aber ich habe das Flag .fullScreen zum Master-Zweig hinzugefügt. Kannst du bitte versuchen, vom Meister zu ziehen und zu sehen, ob es jetzt für dich funktioniert?

Die Syntax zum Ziehen vom Master über CocoaPods lautet:

pod 'CropViewController', :git => 'https://github.com/TimOliver/TOCropViewController.git'

Vielen Dank!

@TimOliver Vielen Dank für deine tolle Arbeit!

Wunderbar! Es funktioniert genau so, wie ich es erwartet habe! 👍

Ich musste auch cropViewController.modalPresentationStyle = .fullScreen in meinem Code festlegen (nicht nur auf den Master-Zweig aktualisieren). Hier eine Notiz hinzufügen, da mir das nicht klar war

Dieser Fix scheint nur für Swift-Code zu funktionieren. Weiß jemand, warum es in Ziel C nicht funktioniert?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen