Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@gongzhang
Last active October 20, 2020 11:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save gongzhang/9bc3f394b52d16b796b48ae9a037bdba to your computer and use it in GitHub Desktop.
Save gongzhang/9bc3f394b52d16b796b48ae9a037bdba to your computer and use it in GitHub Desktop.
import SwiftUI
import PlaygroundSupport
/// `InlineModifier` helps you apply a view modifier in a inline block.
public struct InlineModifier<R: View>: ViewModifier {
private let block: (Content) -> R
public init(@ViewBuilder _ block: @escaping (Content) -> R) {
self.block = block
}
public func body(content: Content) -> some View {
block(content)
}
}
extension View {
public func modifier<T: View>(@ViewBuilder _ block: @escaping (AnyView) -> T) -> some View {
self.modifier(InlineModifier<T>({ (content: InlineModifier<T>.Content) in
block(AnyView(content))
}))
}
}
/// # Demo
struct ContentView: View {
var body: some View {
NavigationView {
List {
Text("Hello")
}
.modifier {
// inline availability check for modifiers ✌️
if #available(iOS 14.0, *) {
$0.listStyle(InsetGroupedListStyle())
} else {
$0.listStyle(GroupedListStyle())
.environment(\.horizontalSizeClass, .regular)
}
}
.navigationTitle("Demo")
}
}
}
PlaygroundPage.current.liveView = UIHostingController(rootView: ContentView())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment