App: Einrueckung haelt auch bei Umbruch, Loeschen fragt mittig

Eingerueckt wurde mit fuehrenden Leerzeichen. Die verschieben aber nur die
ERSTE Zeile: Bricht ein langer Name um ("Schublade Links Unten"), faengt die
Fortsetzung wieder ganz links an und die Hierarchie ist weg.

In einem aufklappenden Menue laesst sich das nicht loesen - dort liefert man
nur Text ab, das System ignoriert jedes Layout (auch lineLimit). Die
Lagerort- und Kategorieauswahl erscheint deshalb jetzt als Liste
(.pickerStyle(.navigationLink)). Dort ist jede Zeile eine echte Ansicht, ein
Innenabstand rueckt den ganzen Block ein - auch die zweite Zeile. Das liest
sich bei vielen Lagerorten ohnehin besser als ein langes Aufklappmenue.

Zwei enge Zeilen bleiben Menues: Mindestbestand je Ort bei Artikel und
Gruppe, wo direkt daneben das Mengenfeld steht. Dort wuerde eine
Listenauswahl die Zeile sprengen; sie behalten die Leerzeichen-Einrueckung.

Der Loeschdialog war ein confirmationDialog und fuhr als Blase von unten
herein. Jetzt ein alert: steht mittig und will gelesen werden.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-15 21:12:29 +02:00
co-authored by Claude Opus 5
parent ea7a42ac22
commit d7002e2252
7 changed files with 46 additions and 13 deletions
+5 -3
View File
@@ -349,8 +349,9 @@ struct ProductDetailView: View {
Text("Änderungen an Name/Marke/Kategorie sind noch nicht gespeichert. "
+ "Foto und Lagerort-Bedarf werden sofort gespeichert.")
}
.confirmationDialog("„\(current.name)“ löschen?", isPresented: $pendingDelete,
titleVisibility: .visible) {
// alert und nicht confirmationDialog: Letzteres faehrt als Blase von
// unten herein. Ein Loeschen will mittig stehen und gelesen werden.
.alert("„\(current.name)“ löschen?", isPresented: $pendingDelete) {
Button("Löschen", role: .destructive) { Task { await loeschen() } }
Button("Abbrechen", role: .cancel) {}
} message: {
@@ -725,8 +726,9 @@ struct LotEditView: View {
Section("Lagerort") {
Picker("Lagerort", selection: $locationId) {
Text("– ohne –").tag(String?.none)
ForEach(baum(locations)) { e in Text(e.label).tag(String?.some(e.item.id)) }
ForEach(baum(locations)) { e in BaumZeile(zeile: e).tag(String?.some(e.item.id)) }
}
.pickerStyle(.navigationLink)
// Ort per QR am Regal/Fach setzen, statt in der Liste zu suchen.
Button { locScanShown = true } label: {
Label("Lagerort scannen", systemImage: "qrcode.viewfinder")