web-dev-qa-db-fra.com

Problème avec les boutons dans SwiftUI sur MacOS

J'utilise SwiftUI sur MACOS

Si je fais ça:

      Button(action: { } ) {
        Text("Press")
        .padding()
        .background(Color.blue)
      }

J'ai compris:

enter image description here

et les deux zones grises sont les extrémités d'un bouton tactile. mais je m'attendrais à ce que le bouton ait la forme de la zone bleue. Toutes les idées sur la façon dont je peux rendre la zone bleue entière exploitable.

(J'ai envisagé d'utiliser .onTapGesture mais cela n'anime pas le bouton de sorte que vous savez que vous l'avez tapé.)

7
Adahus

J'ai soulevé cette question avec Apple sur l'assistant Commentaires pour voir s'ils avaient des idées utiles.

Dialoguez ici:

j'ai dit:

Si sur MACOS avec SwiftUI je fais ceci:

  Button(action: { } ) {
    Text("Press")
    .padding()
    .background(Color.blue)
  }

Je reçois une boîte bleue avec deux morceaux gris qui dépassent sur les côtés. Image jointe. Ce sont les deux zones grises qui sont les extrémités d'un bouton tactile. mais je m'attendrais à ce que le bouton ait la forme de la zone bleue.

Le même code fonctionne bien comme prévu sur iOS.

(J'ai envisagé d'utiliser .onTapGesture mais cela n'anime pas le bouton de sorte que vous savez que vous l'avez tapé.)

Apple a dit:

iOS et macOS ont des ButtonStyles par défaut différents - iOS est sans bordure, macOS a cet effet de lunette standard.

Il semble que vous essayiez de créer un ButtonStyle personnalisé (et donc qu'aucun système ne soit fourni avec Chrome). Vous voudrez donc créer cela, ce qui peut appliquer ce fond bleu à l'étiquette du bouton, puis l'appliquer à votre simple bouton avec du texte, par exemple.

Button("Press"), action {}).buttonStyle(BluePaddingButtonStyle()

Cela garantira qu'il a la même apparence sur chaque plate-forme sur laquelle vous l'exécutez.

j'ai dit:

Salut, Merci pour l'explication. Je comprends ce que vous dites et je suis d'accord avec la méthode que j'ai trouvée.

Il ne semble toujours pas juste que:

  Button(action: { } ) {
    Text("Press")
    .padding()
    .background(Color.blue)
  }

devrait produire quelque chose de si étrange. Je ne comprends pas pourquoi ce bout de code ne peut pas simplement produire un bouton bleu.

Comme je l'ai dit - ce n'est pas un problème parce que j'y ai travaillé, mais cela ne semble pas intuitif actuellement.

Apple a déclaré:

Le contenu fourni à l'intérieur de ViewBuilder est utilisé comme étiquette du bouton: pas le bouton entier. Le bouton sera toujours accompagné de l'arrière-plan, de la lunette, du style de premier plan, etc., comme décrit par ButtonStyle. Donc, si votre bouton doit avoir une apparence très spécifique, il doit personnaliser ce style: soit au BorderlessButtonStyle (mais notez que cela vient toujours avec un style d'apparence de premier plan spécifique), soit à un ButtonStyle personnalisé.

Mes pensées:

Cela m'a aidé à comprendre pourquoi ça se voit comme ça.

1
Adahus