実現したいこと
Human Interface Guidelinesにあるような、サイドバーのすりガラス(NSVisualEffectView)を、Mac Catalystを利用してiPad OSと共通のSwiftUIのコードで実現したいです。
元のソースコード
For文などは省略しています。
SwiftUI
1import SwiftUI 2 3struct NoteView: View { 4 var body: some View { 5 List { 6 ForEach(fruits, id: .self) { fruit in 7 Text(fruit) 8 } 9 }.navigationTitle("タイトル") 10 .listStyle(SidebarListStyle()) 11 } 12} 13
試したこと
SwiftUI
1import SwiftUI 2import AppKit 3 4struct NoteView: View { 5 var body: some View { 6 ZStack { 7 BlurView(style: .systemMaterial) 8 .edgesIgnoringSafeArea(.all) 9 List { 10 ForEach(fruits, id: .self) { fruit in 11 Text(fruit) 12 } 13 .listRowBackground(Color.clear) 14 }.navigationTitle("タイトル") 15 .listStyle(SidebarListStyle()) 16 } 17 } 18} 19 20struct BlurView: UIViewRepresentable { 21 let style: UIBlurEffect.Style 22 func makeUIView(context: UIViewRepresentableContext<BlurView>) -> UIView { 23 let view = UIView(frame: .zero) 24 view.backgroundColor = .clear 25 let blurEffect = UIBlurEffect(style: style) 26 let blurView = UIVisualEffectView(effect: blurEffect) 27 blurView.translatesAutoresizingMaskIntoConstraints = false 28 view.insertSubview(blurView, at: 0) 29 NSLayoutConstraint.activate([ 30 blurView.heightAnchor.constraint(equalTo: view.heightAnchor), 31 blurView.widthAnchor.constraint(equalTo: view.widthAnchor), 32 ]) 33 return view 34 } 35 func updateUIView(_ uiView: UIView, 36 context: UIViewRepresentableContext<BlurView>) { 37 } 38}
結果
通常通り表示された(ベータ版のためスクリーンショット自粛)
補足情報
Xcode 12でSwiftUi 2.0を利用。
iOS 14及びiPad OS 14、macOS 11(Mac Catalyst)をターゲットに指定。
あなたの回答
tips
プレビュー