Таким образом, если на панели инструментов имеется более двух элементов, размещением элемента по умолчанию являются все элементы (ToolbarItem) в иерархии слева и последний элемент (ToolbarItem) в иерархии справа.
После того, как я применю модификатор .toolbarColorScheme(.light, for: .bottomBar)
или .toolbarColorScheme(.dark, for: .bottomBar)
и прокрутлю до конца, второй элемент также переместится вправо.
//
// ToolbarGlitchDemo.swift
// ToolbarGlitchDemo
//
// Created by rayhaanlykhan on 15/04/2024.
//
import SwiftUI
struct ToolbarGlitchDemo: View {
var body: some View {
NavigationStack {
ZStack {
Color.gray.ignoresSafeArea()
ScrollView {
ForEach(0..<15) { _ in
Rectangle()
.fill(.blue)
.frame(width: 200, height: 200)
.frame(maxWidth: .infinity)
}
}
}
.navigationTitle("Toolbar Glitch Demo")
.toolbar {
ToolbarItem(placement: .bottomBar) { // center
HStack {
Image(systemName: "scribble")
Image(systemName: "gear")
}
.background(.yellow)
}
ToolbarItem(placement: .bottomBar) {
HStack {
Image(systemName: "person.fill")
}
.background(.red)
}
ToolbarItem(placement: .bottomBar) {
HStack {
Image(systemName: "person")
Image(systemName: "person")
}
.background(.green)
}
}
.toolbarColorScheme(.light, for: .bottomBar)
}
}
}
#Preview {
ToolbarGlitchDemo()
}
Интересный! Поскольку всем трем ToolbarItem
присвоено место .bottomBar
, фактические позиции внутри нижней панели, вероятно, не определены.
Я обнаружил, что когда вы добавляете изображения по отдельности (другими словами, как 5 ToolbarItem
), то оно начинается как 4+1 и переключается на 1+4 при прокрутке вниз -> тоже непоследовательно.
Вы можете это исправить, установив один единственный ToolbarItem
, состоящий из HStack
, где вы определяете интервал:
.toolbar {
ToolbarItem(placement: .bottomBar) {
HStack {
HStack {
Image(systemName: "scribble")
Image(systemName: "gear")
}
.background(.yellow)
Spacer()
HStack {
Image(systemName: "person.fill")
}
.background(.red)
Spacer()
HStack {
Image(systemName: "person")
Image(systemName: "person")
}
.background(.green)
}
}
}
.toolbarColorScheme(.light, for: .bottomBar)
Интересно, почему этот сбой возникает только тогда, когда мы добавляем модификатор .toolbarColorScheme.
@RehanAliKhan Да, это странно. Я не думаю, что это задумано. Но опять же, когда трем элементам панели инструментов присваивается одна и та же позиция, неудивительно, что результат оказывается непредсказуемым.
Проверено на iOS 17.3.1 и 17.4.