NavigationStack {
TabView(selection: $selection) {
HomeView()
.tabItem {
Image(systemName: "rectangle.grid.1x2.fill")
.padding(.top, 8)
}
.tag(0)
ChatsView()
.tabItem {
Image(systemName: "message")
.padding(.top, 8)
}
.tag(1)
}
.accentColor(.black)
}
Я хочу использовать изображение из активов вместо Image(systemName: "message")
. Когда я пишу Image("myImage")
, он загружает изображение из ресурсов, но оно не того размера, оно слишком велико. Вот я и попробовал Image("myImage").resizable().frame(width: 20, height: 20)
. Но изменение размера здесь просто не работает, размер остается прежним, не знаю почему. Итак, следующее, что я попробовал, — это просто уменьшить изображение актива. Это работает, но при таком подходе отображаемое изображение становится очень пиксельным. Так что тоже не вариант.
Как я могу это сделать?
Вы должны предоставить изображение нужного размера. Руководства по человеческому интерфейсу имеют размеры.
Попробуй это:
struct CustomTabBar: View {
@Binding var selection: Int
var body: some View {
HStack {
Button(action: {
self.selection = 0
}) {
Image(systemName: "rectangle.grid.1x2.fill")
.font(.system(size: 60))
.foregroundColor(self.selection == 0 ? .black : .gray)
}
Button(action: {
self.selection = 1
}) {
Image(systemName: "message")
.font(.system(size: 60))
.foregroundColor(self.selection == 1 ? .black : .gray)
}
}
.padding()
}
}
struct ContentView: View {
@State private var selection = 0
var body: some View {
VStack {
TabView(selection: self.$selection) {
HomeView()
.tag(0)
ChatsView()
.tag(1)
}
CustomTabBar(selection: self.$selection)
}
}
}
К сожалению, не работает, размер остался прежним.
Вы пытались использовать .renderingMode(.original)?
Только что попробовал, тоже не работает
Попробуйте использовать мой ответ снова. Я изменил некоторые части кода
Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, такие как цитаты или документация, чтобы другие могли подтвердить правильность вашего ответа. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
Мне пришлось немного подкорректировать ответ NexusUA, чтобы он заработал:
struct CustomTabBar: View {
@Binding var selection: Int
var body: some View {
HStack {
Button(action: {
self.selection = 0
}) {
Image(systemName: "rectangle.grid.1x2.fill")
.font(.system(size: 60))
.foregroundColor(self.selection == 0 ? .black : .gray)
}
Button(action: {
self.selection = 1
}) {
Image(systemName: "message")
.font(.system(size: 60))
.foregroundColor(self.selection == 1 ? .black : .gray)
}
}
.padding()
}
}
struct ContentView: View {
@State private var selection = 0
var body: some View {
VStack {
TabView(selection: self.$selection) {
HomeView()
.tag(0)
ChatsView()
.tag(1)
}
// add this
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
.navigationBarHidden(true)
CustomTabBar(selection: self.$selection)
}
}
}