SwiftUI — полупрозрачная боковая панель Catalyst

#swiftui #mac-catalyst

#swiftui #mac-catalyst

Вопрос:

Цель состоит в том, чтобы сделать полупрозрачную боковую панель на Mac Catalyst.

Приведенный ниже код дает непрозрачную боковую панель (изображение 1).

На Mac (не catalyst) боковая панель выглядит нормально (изображение 2).

возможно ли иметь полупрозрачную боковую панель на Mac Catalyst?

введите описание изображения здесь

введите описание изображения здесь

 import SwiftUI

struct ContentView: View {
    var body: some View {
        
        NavigationView {
            
            //sidebar
            List {
                Label("Books", systemImage: "book.closed")
                Label("Tutorials", systemImage: "list.bullet.rectangle")
         
            }
            .background(Color.clear)

            .listStyle(SidebarListStyle())
            
            //content
            Text("Sidebar")
            .navigationTitle("Sidebar")
        }
        
        
    }
}
 

Комментарии:

1. Есть новости по этому поводу? У меня такая же проблема.

2. нет, кажется, только UIKit может это сделать, как документация Apple… developer.apple.com/documentation/uikit/mac_catalyst /…

3. вы что-нибудь нашли?

4. да, просто UIKit 😔

5. как насчет добавления модификатора размытия фона? Я пытался, но не сработало…

Ответ №1:

Начните с AppDelegate main и следуйте руководству Apple re: UISplitViewController «Примените полупрозрачный фон к вашему основному контроллеру представления».

https://developer.apple.com/documentation/uikit/mac_catalyst/optimizing_your_ipad_app_for_mac

Обернув UISplitViewController в UIViewControllerRepresentable, я не смог получить прозрачность, но получил боковую панель в полный рост.

Ответ №2:

Вы должны выбрать «Оптимизировать интерфейс для Mac» на вкладке общих настроек вашей цели. Тогда боковая панель будет полупрозрачной.

Комментарии:

1. Это решило проблему для меня, спасибо!

Ответ №3:

Я выяснил, что использование .background(Color.clear) в представлении боковой панели делает возможным полупрозрачный фон, даже если ListStyle не указан как SidebarListStyle() . Работает в Xcode 13.1 для меня

 struct ContentView: View {
    var body: some View {
        NavigationView { // without wrapping to NavigationView it won't work
            List { // can be VStack or HStack
                Text("Hello, world!")
                  .padding()
            }
            .listStyle(SidebarListStyle()) // works with other styles
        Text("")
    }
  }
}

struct YourApp: App {
   var body: some Scene {
      WindowGroup {
        ContentView()
            .toolbar {
                Button {
                    
                } label: {
                    Image(systemName: "gear")
                }

            }
            .background(Color.clear) // 3 <-- MUST HAVE!
      }
   }
}