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