Slightly adjust code (#806)

Renaming, remove iOS-checks.
This commit is contained in:
Nathan Mattes 2022-12-26 15:29:01 +01:00
parent 80c145111a
commit f26f36a60b
4 changed files with 43 additions and 60 deletions

View File

@ -8,18 +8,33 @@
import SwiftUI
class AltViewController: UIViewController {
private var alt: String
let label = {
let textView = {
let textView: UITextView
if #available(iOS 16, *) {
// TODO: update code below to use TextKit 2 when dropping iOS 15 support
return UITextView(usingTextLayoutManager: false)
textView = UITextView(usingTextLayoutManager: false)
} else {
return UITextView()
textView = UITextView()
}
textView.textContainer.maximumNumberOfLines = 0
textView.textContainer.lineBreakMode = .byWordWrapping
textView.font = .preferredFont(forTextStyle: .callout)
textView.isScrollEnabled = true
textView.backgroundColor = .clear
textView.isOpaque = false
textView.isEditable = false
textView.tintColor = .white
textView.textContainerInset = UIEdgeInsets(top: 12, left: 8, bottom: 8, right: 8)
textView.contentInsetAdjustmentBehavior = .always
textView.verticalScrollIndicatorInsets.bottom = 4
return textView
}()
init(alt: String, sourceView: UIView?) {
self.alt = alt
textView.text = alt
super.init(nibName: nil, bundle: nil)
self.modalPresentationStyle = .popover
self.popoverPresentationController?.delegate = self
@ -40,49 +55,32 @@ class AltViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
label.translatesAutoresizingMaskIntoConstraints = false
label.textContainer.maximumNumberOfLines = 0
label.textContainer.lineBreakMode = .byWordWrapping
label.textContainerInset = UIEdgeInsets(
top: 8,
left: 0,
bottom: -label.textContainer.lineFragmentPadding,
right: 0
)
label.font = .preferredFont(forTextStyle: .callout)
label.isScrollEnabled = true
label.backgroundColor = .clear
label.isOpaque = false
label.isEditable = false
label.tintColor = .white
label.text = alt
label.textContainerInset = UIEdgeInsets(top: 12, left: 8, bottom: 8, right: 8)
label.contentInsetAdjustmentBehavior = .always
label.verticalScrollIndicatorInsets.bottom = 4
textView.translatesAutoresizingMaskIntoConstraints = false
view.backgroundColor = .systemBackground
view.addSubview(label)
view.addSubview(textView)
label.pinToParent()
textView.pinToParent()
NSLayoutConstraint.activate([
label.widthAnchor.constraint(lessThanOrEqualToConstant: 400),
textView.widthAnchor.constraint(lessThanOrEqualToConstant: 400),
])
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
UIView.performWithoutAnimation {
let size = label.layoutManager.boundingRect(forGlyphRange: NSMakeRange(0, (label.textStorage.string as NSString).length), in: label.textContainer).size
let size = textView.layoutManager.boundingRect(forGlyphRange: NSMakeRange(0, (textView.textStorage.string as NSString).length), in: textView.textContainer).size
preferredContentSize = CGSize(
width: size.width + (8 + label.textContainer.lineFragmentPadding) * 2,
height: size.height + 12 + (label.textContainer.lineFragmentPadding * 2)
width: size.width + (8 + textView.textContainer.lineFragmentPadding) * 2,
height: size.height + 12 + (textView.textContainer.lineFragmentPadding) * 2
)
}
}
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
label.font = .preferredFont(forTextStyle: .callout)
textView.font = .preferredFont(forTextStyle: .callout)
}
}

View File

@ -181,9 +181,9 @@ extension MediaPreviewViewController {
@objc private func altButtonPressed(_ sender: UIButton) {
guard let alt = viewModel.altText else { return }
present(AltViewController(alt: alt, sourceView: sender), animated: true)
}
}
// MARK: - MediaPreviewingViewController

View File

@ -7,7 +7,6 @@
import SwiftUI
@available(iOS 15.0, *)
struct MediaAltTextOverlay: View {
var altDescription: String?
@ -69,7 +68,6 @@ struct MediaAltTextOverlay: View {
}
}
@available(iOS 15.0, *)
struct MediaAltTextOverlay_Previews: PreviewProvider {
static var previews: some View {
MediaAltTextOverlay(altDescription: "Hello, world!")

View File

@ -73,20 +73,12 @@ public final class MediaView: UIView {
return label
}()
let _altViewController: UIViewController! = {
if #available(iOS 15.0, *) {
let vc = UIHostingController(rootView: MediaAltTextOverlay())
vc.view.backgroundColor = .clear
return vc
} else {
return nil
}
let altViewController: UIHostingController<MediaAltTextOverlay> = {
let vc = UIHostingController(rootView: MediaAltTextOverlay())
vc.view.backgroundColor = .clear
return vc
}()
@available(iOS 15.0, *)
var altViewController: UIHostingController<MediaAltTextOverlay> {
_altViewController as! UIHostingController<MediaAltTextOverlay>
}
public override init(frame: CGRect) {
super.init(frame: frame)
_init()
@ -228,9 +220,8 @@ extension MediaView {
} else {
accessibilityLabel = altDescription
}
if #available(iOS 15.0, *) {
altViewController.rootView.altDescription = altDescription
}
altViewController.rootView.altDescription = altDescription
}
private func layoutBlurhash() {
@ -262,11 +253,9 @@ extension MediaView {
}
private func layoutAlt() {
if #available(iOS 15.0, *) {
altViewController.view.translatesAutoresizingMaskIntoConstraints = false
container.addSubview(altViewController.view)
altViewController.view.pinToParent()
}
altViewController.view.translatesAutoresizingMaskIntoConstraints = false
container.addSubview(altViewController.view)
altViewController.view.pinToParent()
}
public func prepareForReuse() {
@ -304,10 +293,8 @@ extension MediaView {
container.removeFromSuperview()
container.removeConstraints(container.constraints)
if #available(iOS 15.0, *) {
altViewController.rootView.altDescription = nil
}
altViewController.rootView.altDescription = nil
// reset configuration
configuration = nil
}