При добавлении Map
с помощью MapKit
изменяется внешний вид TabBar, в частности, придается панели инструментов полупрозрачный фон с тенью; стиль iOS по умолчанию.
Я попытался добавить на карту следующий модификатор
.toolbarBackground(Color("White"), for: .navigationBar)
Но панель инструментов навигации по-прежнему имеет тень, а TabBar имеет полупрозрачный цвет фона по умолчанию с тенью.
Корень
init() {
// this is not the same as manipulating the proxy directly
let appearance = UINavigationBarAppearance()
// this overrides everything you have set up earlier.
appearance.configureWithTransparentBackground()
appearance.shadowColor = .clear
//In the following two lines you make sure that you apply the style for good
UINavigationBar.appearance().scrollEdgeAppearance = appearance
UINavigationBar.appearance().standardAppearance = appearance
UITabBar.appearance().barTintColor = UIColor.white
UITabBar.appearance().backgroundColor = UIColor.white
UITabBar.appearance().shadowImage = UIImage()
UITabBar.appearance().backgroundImage = UIImage()
UINavigationBar.appearance().isTranslucent = false
UIToolbar.appearance().backgroundColor = UIColor.white
UIToolbar.appearance().isTranslucent = false
UIToolbar.appearance().setShadowImage(UIImage(), forToolbarPosition: .any)
}
struct MainView: View {
var body: some View {
TabView {
ContentView()
.tabItem {
Label("Menu", systemImage: "list.dash")
}
}
}
}
Панель вкладок имеет сплошной белый цвет без тени, а также панели навигации.
Просмотр контента
struct ContentView: View {
@State var position = MapCameraPosition.region(
MKCoordinateRegion(
center: CLLocationCoordinate2D(latitude: 51.510357, longitude: -0.116773),
latitudinalMeters: 500, longitudinalMeters: 500)
)
var body: some View {
NavigationStack() {
NavigationLink(destination: MapView(position: $position)) {
Text("Hello, World!")
}
}
.navigationTitle("Content")
}
}
КартаView
struct MapView: View {
@Binding var position: MapCameraPosition
var body: some View {
Map(position: $position)
.mapControlVisibility(.hidden)
.edgesIgnoringSafeArea(.bottom)
.allowsHitTesting(false)
.frame(maxWidth: .infinity)
.frame(height: 414)
.clipped()
}
}
Я просмотрел документацию, но ничего не нашел. https://developer.apple.com/documentation/mapkit/map
@workingdogsupportUkraine спасибо за ответ, я обновил ответ, но проблема все еще существует
Пожалуйста, покажите, что вам нужно и что вы получите с изображениями для пояснения.
Чтобы полоса имела сплошной цвет, вы должны убедиться, что это одновременно colored
И visible
, используя:
.toolbarBackground(.visible, for: .tabBar)
.toolbarBackground(.white, for: .tabBar)
Также обратите внимание, что конфигурация ДОЛЖНА применяться ВНУТРИ представления Navigation
или Tab
, а НЕ сама по себе!
Например, я применил их глубоко внутри Map
:
К сожалению, в Swiftui нет прямого способа скрыть эти тени. но вы можете одновременно скрыть и цвет фона, и тень, передав hidden
:
.toolbarBackground(.visible, for: .tabBar)
.toolbarBackground(.white, for: .tabBar)
invisible
решеток.Вы можете добавить цвет фона, игнорируя всю безопасную область, и вычесть безопасную область, чтобы она отображалась как фон полос:
ZStack {
Color(.red).ignoresSafeArea()
Rectangle().blendMode(.destinationOut)
}
.compositingGroup()
Конечно, вы можете использовать цвет .white
в сочетании с цветом method 3
, чтобы добиться того, что вы изначально просили:
PS: Полностью избавьтесь от этого init
метода, который вы пишете!
PS: Не забудьте проверить свои потребности в темном режиме! Вы можете просто использовать method 2
и просто обрезать содержимое, если вам нужно, чтобы полосы соответствовали текущей цветовой схеме (светлая/темная).
Большое спасибо за ваш ответ, в MapView TabBar и NavigationBar отображаются правильно, однако, когда я возвращаюсь в ContentView, панели инструментов фактически снова становятся полупрозрачными с тенью. Итак, это просмотр содержимого с белым > MapView с белым > Прозрачный просмотр содержимого.
Я думаю, вы меняете внешний вид где-то еще. Вот что я вижу без проблем.
Награжден! Мне пришлось ждать Х времени, прежде чем получить награду. Спасибо!! Это была такая боль
продолжение: похоже, что модификатор меняет шрифт навигации, установленный в init, есть ли способ предотвратить это? или снова поменяйте шрифт
Извините, но я не понял. Кстати, комментарии – не лучшее место для обсуждения технических вопросов. Пожалуйста, откройте новый вопрос с необходимой детализацией и минимально воспроизводимым кодом, чтобы я и сообщество могли внести свой вклад 🙌🏻
Конечно, я разместил вопрос здесь: stackoverflow.com/questions/78480945/…
Обратите внимание:
NavigationView
устарел, используйтеNavigationStack
. Также есть более новые версии звонковMap
, см.: Карта