forked from shadowfacts/Tusker
52 lines
1.5 KiB
Swift
52 lines
1.5 KiB
Swift
//
|
|
// NSCollectionLayoutSection+Readable.swift
|
|
// Tusker
|
|
//
|
|
// Created by Shadowfacts on 9/28/23.
|
|
// Copyright © 2023 Shadowfacts. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
extension NSCollectionLayoutSection {
|
|
|
|
// The .readableContent insets reference has a bunch of weird behavior,
|
|
// so just calculate the content inset ourselves.
|
|
func readableContentInset(in environment: NSCollectionLayoutEnvironment) {
|
|
guard let maximumReadableWidth = environment.maximumReadableWidth else {
|
|
return
|
|
}
|
|
let inset = max(0, (environment.container.contentSize.width - maximumReadableWidth) / 2)
|
|
// make sure not to overwrite the vertical insets, which are non-zero for grouped styles
|
|
contentInsets.leading = inset
|
|
contentInsets.trailing = inset
|
|
}
|
|
|
|
}
|
|
|
|
extension NSCollectionLayoutEnvironment {
|
|
var maximumReadableWidth: CGFloat? {
|
|
switch traitCollection.preferredContentSizeCategory {
|
|
case .extraSmall:
|
|
return 560
|
|
case .small:
|
|
return 600
|
|
case .medium:
|
|
return 632
|
|
case .large:
|
|
return 664
|
|
case .extraLarge:
|
|
return 744
|
|
case .extraExtraLarge:
|
|
return 816
|
|
case .extraExtraExtraLarge:
|
|
return 896
|
|
case .accessibilityMedium:
|
|
return 1096
|
|
default:
|
|
// greater accessibility sizes don't have a limit
|
|
return nil
|
|
}
|
|
}
|
|
}
|