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