From e2e93bdaf0dfd606b776d88d97075a5a25d891e7 Mon Sep 17 00:00:00 2001 From: Stefan Painhapp <4242986+painhapp@users.noreply.github.com> Date: Fri, 18 Nov 2022 03:53:52 +0900 Subject: [PATCH 1/2] #607 Use safe areas for image preview --- .../Image/MediaPreviewImageViewController.swift | 8 ++++---- ...oMediaPreviewViewControllerAnimatedTransitioning.swift | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Mastodon/Scene/MediaPreview/Image/MediaPreviewImageViewController.swift b/Mastodon/Scene/MediaPreview/Image/MediaPreviewImageViewController.swift index 127c4c0c0..e28249312 100644 --- a/Mastodon/Scene/MediaPreview/Image/MediaPreviewImageViewController.swift +++ b/Mastodon/Scene/MediaPreview/Image/MediaPreviewImageViewController.swift @@ -46,10 +46,10 @@ extension MediaPreviewImageViewController { previewImageView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(previewImageView) NSLayoutConstraint.activate([ - previewImageView.frameLayoutGuide.topAnchor.constraint(equalTo: view.topAnchor), - previewImageView.frameLayoutGuide.leadingAnchor.constraint(equalTo: view.leadingAnchor), - previewImageView.frameLayoutGuide.trailingAnchor.constraint(equalTo: view.trailingAnchor), - previewImageView.frameLayoutGuide.bottomAnchor.constraint(equalTo: view.bottomAnchor), + previewImageView.frameLayoutGuide.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), + previewImageView.frameLayoutGuide.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor), + previewImageView.frameLayoutGuide.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor), + previewImageView.frameLayoutGuide.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), ]) tapGestureRecognizer.addTarget(self, action: #selector(MediaPreviewImageViewController.tapGestureRecognizerHandler(_:))) diff --git a/Mastodon/Scene/Transition/MediaPreview/MediaHostToMediaPreviewViewControllerAnimatedTransitioning.swift b/Mastodon/Scene/Transition/MediaPreview/MediaHostToMediaPreviewViewControllerAnimatedTransitioning.swift index 5381feb0d..8d6549b60 100644 --- a/Mastodon/Scene/Transition/MediaPreview/MediaHostToMediaPreviewViewControllerAnimatedTransitioning.swift +++ b/Mastodon/Scene/Transition/MediaPreview/MediaHostToMediaPreviewViewControllerAnimatedTransitioning.swift @@ -65,7 +65,7 @@ extension MediaHostToMediaPreviewViewControllerAnimatedTransitioning { let initialFrame = transitionItem.initialFrame ?? toViewEndFrame let transitionTargetFrame: CGRect = { let aspectRatio = transitionItem.aspectRatio ?? CGSize(width: initialFrame.width, height: initialFrame.height) - return AVMakeRect(aspectRatio: aspectRatio, insideRect: toView.bounds) + return AVMakeRect(aspectRatio: aspectRatio, insideRect: toView.bounds.inset(by: toView.safeAreaInsets)) }() let transitionImageView: UIImageView = { let imageView = UIImageView(frame: transitionContext.containerView.convert(initialFrame, from: nil)) From 7ab62394de1c5d6964cb354f676048ba193d8d67 Mon Sep 17 00:00:00 2001 From: Stefan Painhapp <4242986+painhapp@users.noreply.github.com> Date: Fri, 18 Nov 2022 19:07:44 +0900 Subject: [PATCH 2/2] Handle safe areas for image preview --- .../Image/MediaPreviewImageView.swift | 16 ++-------------- .../Image/MediaPreviewImageViewController.swift | 8 ++++---- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/Mastodon/Scene/MediaPreview/Image/MediaPreviewImageView.swift b/Mastodon/Scene/MediaPreview/Image/MediaPreviewImageView.swift index 05f2ce70f..bb7d2d49f 100644 --- a/Mastodon/Scene/MediaPreview/Image/MediaPreviewImageView.swift +++ b/Mastodon/Scene/MediaPreview/Image/MediaPreviewImageView.swift @@ -112,23 +112,14 @@ extension MediaPreviewImageView { // reset to normal zoomScale = minimumZoomScale - let imageViewSize = AVMakeRect(aspectRatio: image.size, insideRect: container.bounds).size - let imageContentInset: UIEdgeInsets = { - if imageViewSize.width == container.bounds.width { - return UIEdgeInsets(top: 0.5 * (container.bounds.height - imageViewSize.height), left: 0, bottom: 0, right: 0) - } else { - return UIEdgeInsets(top: 0, left: 0.5 * (container.bounds.width - imageViewSize.width), bottom: 0, right: 0) - } - }() + let imageViewSize = AVMakeRect(aspectRatio: image.size, insideRect: container.bounds.inset(by: container.safeAreaInsets)).size imageView.frame = CGRect(origin: .zero, size: imageViewSize) if imageView.image == nil { imageView.image = image } contentSize = imageViewSize - contentInset = imageContentInset centerScrollViewContents() - contentOffset = CGPoint(x: -contentInset.left, y: -contentInset.top) os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s: setup image for container %s", ((#file as NSString).lastPathComponent), #line, #function, container.frame.debugDescription) } @@ -192,10 +183,7 @@ extension MediaPreviewImageView { frame.size = realImageSize imageView.frame = frame - let screenSize = self.frame.size - let offsetX = screenSize.width > realImageSize.width ? (screenSize.width - realImageSize.width) / 2 : 0 - let offsetY = screenSize.height > realImageSize.height ? (screenSize.height - realImageSize.height) / 2 : 0 - contentInset = UIEdgeInsets(top: offsetY, left: offsetX, bottom: offsetY, right: offsetX) + contentInset = self.safeAreaInsets // The scroll view has zoomed, so you need to re-center the contents let scrollViewSize = scrollViewVisibleSize diff --git a/Mastodon/Scene/MediaPreview/Image/MediaPreviewImageViewController.swift b/Mastodon/Scene/MediaPreview/Image/MediaPreviewImageViewController.swift index e28249312..127c4c0c0 100644 --- a/Mastodon/Scene/MediaPreview/Image/MediaPreviewImageViewController.swift +++ b/Mastodon/Scene/MediaPreview/Image/MediaPreviewImageViewController.swift @@ -46,10 +46,10 @@ extension MediaPreviewImageViewController { previewImageView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(previewImageView) NSLayoutConstraint.activate([ - previewImageView.frameLayoutGuide.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), - previewImageView.frameLayoutGuide.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor), - previewImageView.frameLayoutGuide.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor), - previewImageView.frameLayoutGuide.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), + previewImageView.frameLayoutGuide.topAnchor.constraint(equalTo: view.topAnchor), + previewImageView.frameLayoutGuide.leadingAnchor.constraint(equalTo: view.leadingAnchor), + previewImageView.frameLayoutGuide.trailingAnchor.constraint(equalTo: view.trailingAnchor), + previewImageView.frameLayoutGuide.bottomAnchor.constraint(equalTo: view.bottomAnchor), ]) tapGestureRecognizer.addTarget(self, action: #selector(MediaPreviewImageViewController.tapGestureRecognizerHandler(_:)))