web-dev-qa-db-fra.com

Comment faire de la largeur de vue égale à superview à Swiftui

J'ai Button

enter image description here

struct ContentView : View {
    var body: some View {
        HStack {
            Button(action: {}) {
                Text("MyButton")
                    .color(.white)
                    .font(Font.system(size: 17))
            }
            .frame(height: 56)
            .background(Color.red, cornerRadius: 0)
        }
    }
}

Mais je veux l'épingler sur les bords de Supeview (traînant à la fin de Superview et du début). Comme ça:

enter image description here

HStack _ ne m'aidait pas, et cela s'attend à ce que cela s'attend à. Fixe frame ou largeur est égal à UIScree.size ne sont pas des solutions flexibles.

32
Argas

J'ai trouvé une solution:

var body: some View {
    Button(action: {}) {
            HStack {
                Spacer()
                Text("MyButton")
                    .color(.white)
                    .font(Font.system(size: 17))
                Spacer()
            }
            .frame(height: 56)
            .background(Color.red, cornerRadius: 0)
        }.padding(20)
}

Mais je ne suis pas sûr que ce soit le meilleur. Peut être quelqu'un trouvera une solution plus élégante /

1
Argas

Voici une solution pure SWIFTUI où vous souhaitez remplir la largeur du parent, mais contraindre la hauteur à un rapport d'aspect arbitraire (disons que vous voulez des images carrées):

            ZStack {
                Image("myImage")
                    .resizable()
                    .scaledToFill()
                    .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
                    .clipped()
            }
            .aspectRatio(1.0, contentMode: .fill)

Il suffit de remplacer 1,0 avec le rapport de l'image que vous souhaitez.

J'ai passé une journée à essayer de comprendre cela parce que je ne voulais pas utiliser GeometryReader ou Uisreen.Main.bounds (qui n'est pas une plate-forme inter-plate-forme)

0
Sherwin Zadeh