From 1a11dd2a695034cfad1c17b3663c6eb881ba9c63 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Mon, 16 Mar 2020 20:12:58 -0400 Subject: [PATCH] Present asset picker as popover in regular horizontal size class --- .../AssetCollectionViewController.swift | 15 +++++++++++++++ .../ComposeAttachmentsViewController.swift | 18 ++++++++++++++---- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/Tusker/Screens/Asset Picker/AssetCollectionViewController.swift b/Tusker/Screens/Asset Picker/AssetCollectionViewController.swift index 8c6ea1fa..1d584d14 100644 --- a/Tusker/Screens/Asset Picker/AssetCollectionViewController.swift +++ b/Tusker/Screens/Asset Picker/AssetCollectionViewController.swift @@ -49,6 +49,21 @@ class AssetCollectionViewController: UICollectionViewController { override func viewDidLoad() { super.viewDidLoad() + // use the safe area layout guide instead of letting it automatically use the safe area insets + // because otherwise, when presented in a popover with the arrow on the left or right side, + // the collection view content will be cut off by the width of the arrow because the popover + // doesn't respect safe area insets + collectionView.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + view.safeAreaLayoutGuide.leadingAnchor.constraint(equalTo: collectionView.leadingAnchor), + view.safeAreaLayoutGuide.trailingAnchor.constraint(equalTo: collectionView.trailingAnchor), + // top ignores safe area because when presented in the sheet container, it simplifies the top content offset + view.topAnchor.constraint(equalTo: collectionView.topAnchor), + // bottom ignores safe area because we want cells to underflow bottom of the screen on notched iPhones + view.bottomAnchor.constraint(equalTo: collectionView.bottomAnchor), + ]) + view.backgroundColor = .systemBackground + navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(donePressed)) collectionView.alwaysBounceVertical = true diff --git a/Tusker/Screens/Compose/ComposeAttachmentsViewController.swift b/Tusker/Screens/Compose/ComposeAttachmentsViewController.swift index 5401f709..d5da384d 100644 --- a/Tusker/Screens/Compose/ComposeAttachmentsViewController.swift +++ b/Tusker/Screens/Compose/ComposeAttachmentsViewController.swift @@ -303,10 +303,20 @@ class ComposeAttachmentsViewController: UITableViewController { // MARK: Interaction func addAttachmentPressed() { - let sheetContainer = AssetPickerSheetContainerViewController() - sheetContainer.assetPicker.assetPickerDelegate = self - present(sheetContainer, animated: true) - //setOverrideTraitCollection(UITraitCollection(userInterfaceLevel: .elevated), forChild: sheetContainer) + if traitCollection.horizontalSizeClass == .compact { + let sheetContainer = AssetPickerSheetContainerViewController() + sheetContainer.assetPicker.assetPickerDelegate = self + present(sheetContainer, animated: true) + } else { + let picker = AssetPickerViewController() + picker.assetPickerDelegate = self + picker.overrideUserInterfaceStyle = .dark + picker.modalPresentationStyle = .popover + present(picker, animated: true) + if let presentationController = picker.presentationController as? UIPopoverPresentationController { + presentationController.sourceView = tableView.cellForRow(at: IndexPath(row: 0, section: 1)) + } + } } }