[SWIFT] Informationen zum Popover-Fix für iOS 13

Einführung

Es scheint, dass sich die Stapelreihenfolge von Popover-Masken von iOS 13 geändert hat. .. .. Als ich bemerkte, dass der durch Popover angezeigte Picker usw. abgeschnitten war, also Ich werde die Korrekturmethode als Memorandum zusammenfassen.

Umgebung

swift5 Xcode 11.4.1

Vor der Korrektur

Die UI-Verschiebung ist wie folgt. Wenn sich links und rechts Pfeile befinden, wird diese deutlich abgeschnitten.

Die ursprüngliche Implementierung war übrigens so.

hoge.swift



//Bildauswahlanzeige
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .photoLibrary
imagePicker.modalPresentationStyle = .popover
imagePicker.mediaTypes = [kUTTypeMovie as String]
        
let popover = imagePicker.popoverPresentationController
popover?.sourceView = button
popover?.sourceRect = button.bounds
        
present(imagePicker, animated: true, completion: nil)

Wie repariert man

Ich habe eine Erweiterung für UIViewController erstellt.

UIViewController+Picker.swift


extension UIViewController {

    ///Erstellen Sie eine VC für Picker und zeigen Sie Picker an(Für imagePicker)
    ///
    /// - Parameters:
    ///   - imagePickerController: UIImagePickerController
    ///   - source:Ansicht, die die Anzeigequelle der Auswahl ist
    func presentPickerView(_ imagePickerController: UIImagePickerController, source: UIView) {
        guard let imagePickerView = imagePickerController.view else { return }
        //Erstellen Sie eine Basis-VC
        let customPickerViewController = UIViewController()
        //AddChild zuerst
        customPickerViewController.addChild(imagePickerController)
        //Stellen Sie die Basis-VC und den imagePicker auf die gleiche Größe ein
        imagePickerController.view.frame = customPickerViewController.view.frame
        //Auf false setzen, wenn AutoLayout im Code für eine Ansicht angegeben wird, die eine Unteransicht sein kann
        imagePickerController.view.translatesAutoresizingMaskIntoConstraints = false
        //addSubview
        customPickerViewController.view.addSubview(imagePickerView)
        //Hier geben wir die Einschränkungen von ImagePicker für die Sicherheit der Basis-VC an.
        NSLayoutConstraint.activate([
            imagePickerController.view.leadingAnchor.constraint(equalTo:
                customPickerViewController.view.safeAreaLayoutGuide.leadingAnchor),
            imagePickerController.view.trailingAnchor.constraint(equalTo:
                customPickerViewController.view.safeAreaLayoutGuide.trailingAnchor),
            imagePickerController.view.topAnchor.constraint(equalTo:
                customPickerViewController.view.safeAreaLayoutGuide.topAnchor),
            imagePickerController.view.bottomAnchor.constraint(equalTo:
                customPickerViewController.view.safeAreaLayoutGuide.bottomAnchor)
        ])
        //Set mit didMove abgeschlossen
        imagePickerController.didMove(toParent: customPickerViewController)

        //Im Folgenden wird auf die grundlegende Implementierung von Picker zurückgegriffen.
        //Geben Sie die Größe für die Basisansicht an(=Die Größe des Pickers)
        customPickerViewController.preferredContentSize = CGSize(width: 200,
                                                                 height: 200)
        customPickerViewController.modalPresentationStyle = .popover
        let popover = customPickerViewController.popoverPresentationController
        popover?.sourceView = source
        popover?.sourceRect = source.bounds

        present(customPickerViewController, animated: true, completion: nil)
    }
}

Wenn Sie es verwenden, sieht es so aus

ViewController.swift



@IBOutlet func TapButton(_ sender: UIButton) {
    //Erstellen Sie die Auswahl, die Sie anzeigen möchten
    let imagePicker = UIImagePickerController()
    //Legen Sie den Delegaten usw. in der angezeigten Klasse fest
    imagePicker.delegate = self
    imagePicker.sourceType = .photoLibrary
    //Anzeige mit Erweiterung
    presentPickerView(imagePicker, source: button)
}

Ende.

Recommended Posts

Informationen zum Popover-Fix für iOS 13
Einführung in Kotlin für iOS-Entwickler ③-About gradle
Über für Anweisung und wenn Anweisung
Informieren Sie sich über annotationProcessor für Gradle 5.0
[Für unsere Neulinge] Über isXXX-Methoden
[Für Java-Anfänger] Informationen zur Ausnahmebehandlung