[SWIFT] À propos du correctif Popover pour iOS 13

introduction

Il semble que l'ordre d'empilement des masques popover ait changé depuis iOS 13 maintenant. .. .. Quand j'ai remarqué, le sélecteur etc. affiché par popover était coupé, donc Je résumerai la méthode de correction dans un mémorandum.

environnement

swift5 Xcode 11.4.1

Avant correction

Le changement de l'interface utilisateur est comme ça. Lorsqu'il y a des flèches à gauche et à droite, il sera clairement coupé.

À propos, la mise en œuvre originale était comme ça.

hoge.swift



//Affichage du sélecteur d'images
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)

Comment réparer

J'ai créé une extension pour UIViewController.

UIViewController+Picker.swift


extension UIViewController {

    ///Créer un VC pour Picker et afficher Picker(Pour imagePicker)
    ///
    /// - Parameters:
    ///   - imagePickerController: UIImagePickerController
    ///   - source:Vue qui est la source d'affichage du sélecteur
    func presentPickerView(_ imagePickerController: UIImagePickerController, source: UIView) {
        guard let imagePickerView = imagePickerController.view else { return }
        //Créer un VC de base
        let customPickerViewController = UIViewController()
        //AddChild d'abord
        customPickerViewController.addChild(imagePickerController)
        //Rendre le VC de base et l'imagePicker de la même taille
        imagePickerController.view.frame = customPickerViewController.view.frame
        //Défini sur false lors de la spécification de la mise en page automatique dans le code pour une vue qui peut être une sous-vue
        imagePickerController.view.translatesAutoresizingMaskIntoConstraints = false
        //addSubview
        customPickerViewController.view.addSubview(imagePickerView)
        //Ici, nous allons spécifier les restrictions d'ImagePicker pour la safaArea du VC de base.
        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)
        ])
        //ensemble terminé avec didMove
        imagePickerController.didMove(toParent: customPickerViewController)

        //Ce qui suit revient à l'implémentation de base de picker.
        //Spécifiez la taille de la vue de base(=La taille du cueilleur)
        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)
    }
}

Lors de son utilisation, cela ressemble à ceci

ViewController.swift



@IBOutlet func TapButton(_ sender: UIButton) {
    //Créez le sélecteur que vous souhaitez afficher
    let imagePicker = UIImagePickerController()
    //Définir le délégué, etc. dans la classe affichée
    imagePicker.delegate = self
    imagePicker.sourceType = .photoLibrary
    //Afficher avec l'extension
    presentPickerView(imagePicker, source: button)
}

fin.

Recommended Posts

À propos du correctif Popover pour iOS 13
Introduction à kotlin pour les développeurs iOS ③-À propos de gradle
À propos de l'instruction et de l'instruction if
En savoir plus sur annotationProcessor for Gradle 5.0
[Pour nos nouveaux arrivants] À propos des méthodes isXXX
[Pour les débutants en Java] À propos de la gestion des exceptions