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.
swift5 Xcode 11.4.1
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)
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