This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// An iOS style TabView that doesn't reset it's childrens navigation stacks when tabs are switched. | |
public struct UIKitTabView: View { | |
private var viewControllers: [UIHostingController<AnyView>] | |
private var selectedIndex: Binding<Int>? | |
@State private var fallbackSelectedIndex: Int = 0 | |
public init(selectedIndex: Binding<Int>? = nil, @TabBuilder _ views: () -> [Tab]) { | |
self.viewControllers = views().map { | |
let host = UIHostingController(rootView: $0.view) | |
host.tabBarItem = $0.barItem |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import SwiftUI | |
// Works around a critical issue observed on iPads with a trackpad cursor. | |
// | |
// With highPriorityGesture, other interactive content on the screen can become unresponsive after | |
// triggering the gesture with an iPad cursor. It's as if the gesture seems to never relinquish its | |
// grasp on the entire UI, until you interact with the screen directly with a tap or trigger a | |
// context menu. | |
// | |
// This view modifier and extension works around this by forcing the gesture to be "cancelled" by |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
private extension Bundle { | |
private static let packageName = "my-package" | |
private static let moduleName = "MyModule" | |
static var swiftUIPreviewsCompatibleModule: Bundle { | |
final class CurrentBundleFinder {} | |
let isPreview = ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] == "1" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import SwiftUI | |
private struct SafeAreaInsetsFollowReadableWidthModifier: ViewModifier { | |
static let readableWidth: Double = 672 | |
@ViewBuilder | |
func body(content: Content) -> some View { | |
GeometryReader { geometry in | |
let insetLength = max(0, geometry.size.width - Self.readableWidth) / 2 |
OlderNewer