Section Inhalt zentrieren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Section Inhalt zentrieren

    Hallo,

    ich habe eine View mit mehreren Sections. Den Inhalt einer dieser Sections möchte ich gerne zentriert haben.

    Es geht dabei um die Section mit dem Button "Add Picture" und dem Rating (die Katzenpfoten)

    Quellcode

    1. NavigationView
    2. {
    3. Form
    4. {
    5. Section
    6. {
    7. TextField("Name of the Creature", text: $name)
    8. TextField("Local Name of the Creature", text: $nameCN)
    9. Picker("Country", selection: $country)
    10. {
    11. ForEach(countries, id: \.self)
    12. {
    13. Text($0)
    14. }
    15. }
    16. .pickerStyle(WheelPickerStyle())
    17. }
    18. Section // um diese Section geht es
    19. {
    20. VStack // alignment Angaben können hinzugefügt werden bewegen sich aber nicht über die ganze Breit
    21. {
    22. Button("Add Picture")
    23. {
    24. //action
    25. }
    26. .padding()
    27. RatingView(rating: $rating)
    28. }
    29. }
    30. Section
    31. {
    32. TextEditor(text: $information)
    33. .padding()
    34. } header: {
    35. Text("Write down Creature information")
    36. }
    37. Section
    38. {
    39. Button("Save")
    40. {
    41. let newCreature = Kreatur(context: moc)
    42. newCreature.id = UUID()
    43. newCreature.name = name
    44. newCreature.nameCN = nameCN
    45. newCreature.country = country
    46. newCreature.information = information
    47. newCreature.rating = Int16(rating)
    48. //picture ...
    49. try? moc.save()
    50. dismiss()
    51. }
    52. }
    53. }
    54. .navigationTitle("Add Creature")
    55. }
    56. }
    Alles anzeigen
  • Hey,

    wie du ja schreibst, geht im Quellcode um die Passage zwischen Line 20 und 31. Deine Idee, ein Center-Alignment zum VStack hinzuzufügen, ist grundsätzlich schon einmal korrekt! Der Grund, weshalb das allerdings nicht ausreicht, ist der folgende: Der VStack "dehnt" sich, im Gegensatz zu z.B. Color oder Spacer() nicht auf die verfügbare Fläche aus, sondern wächst nur mit dem dem Content mit. Und da dein Button nicht die volle Breite ausfüllt, bleibt eben auch der zentrierte Stack links kleben.

    Es gibt zwei Lösungsideen, würde ich sagen. Entweder du "zwingst" den Button, auf die volle Breite zu wachsen, z.B.. mit einem .frame(width: .infinity, alignment: .center) modifier. Oder du benutzt Spacer und einen horizontalen Stack. Ich denke letzteres ist die üblichere Form. Das würde dann so aussehen (Code nicht getestet):

    Quellcode

    1. Section {
    2. VStack {
    3. HStack {
    4. Spacer()
    5. Button("Add Picture") { // Action }
    6. .padding()
    7. Spacer()
    8. }
    9. RatingView(rating: $rating)
    10. }
    11. }
    Alles anzeigen
    Viele Grüße
  • Kurze Anmerkung zu der ansonsten korrekten Antwort:

    Osxer schrieb:


    Es gibt zwei Lösungsideen, würde ich sagen. Entweder du "zwingst" den Button, auf die volle Breite zu wachsen, z.B.. mit einem .frame(width: .infinity, alignment: .center) modifier.

    Es müsste soweit ich weiß maxWidth statt width sein:

    Quellcode

    1. .frame(maxWidth: .infinity, alignment: .center)
    Ich bevorzuge hier aber auch die Lösung mit Spacer().
    So Long, and Thanks for All the Fish.