0
votes

SWIFTUI: Comment puis-je attribuer mon initialisateur à un objet spécifique?

J'utilise uiscrollview.apparance (). BackgroundColor Pour changer la couleur de fond de mon contenuView. Mais malheureusement, cela a l'effet secondaire que les couleurs de mon modalview () ne sont plus normales.

Pour résoudre le problème, je vois trois solutions possibles:

La première option est d'une manière ou d'une autre pour affecter la référence uiscrollview.apparance (). BackgroundColor = uicolor.red uniquement au premier ScrollView .

La seconde serait de trouver un autre moyen de modifier la couleur de fond de mon contentView () .

et la troisième option serait de réinitialiser le uiscrollview.apparance (). BackgroundColor dans modalview () Retour au réglage par défaut. ( Edit: Je pense maintenant que la troisième option n'est pas possible )

et merci pour chaque réponse xxx


Ceci est mon modalview () avec les "beaux" effets secondaires Entrez la description de l'image ici

Dans cette image, vous pouvez voir ce qui me fait croire que la troisième option n'est pas possible:
- L'intérieur du champ de texte sélectionné est décoloré
- Les suggestions de correction automatique sont également décolorées
- avec le mode sombre allumé il devient encore pire de
Entrez la description de l'image ici


3 commentaires

Ne changez pas l'apparence de uiscrollview alors. Appliquez le modificateur dans le ScrollView


Mais malheureusement, je ne peux pas comprendre comment faire ça.


Utilisez simplement le modificateur de .background (Color.red) sur votre ScrollView ().


3 Réponses :


3
votes

Appliquez simplement la couleur d'arrière-plan directement à la vue de défilement.

return VStack{
    ScrollView { // This ScrollView should be affected by the initializer
        Text("Text 1")
    }
        .background(Color.red)
    ScrollView { // This ScrollView should NOT be affected by the initializer
        Text("Text 2")
    }
}


5 commentaires

Non, ce n'est pas la solution à mon problème. Cela peut fonctionner dans l'exemple du code ci-dessus, mais comme je l'ai déjà dit, il s'agit d'une version très simplifiée. Et malheureusement, cela ne fonctionne pas dans mon vrai projet. Mais merci pour la réponse quand même. Et j'ai édité un peu le code pour en faire plus comme mon vrai projet.


@ Mattstisschulte est là une raison pour laquelle vous devez utiliser l'apparence () API alors? Vous pouvez toujours le remplacer pour des vues individuelles.


Oui, j'ai besoin de l'apparence () API, car il s'agit du moyen le plus simple de modifier la couleur de fond de Contenview, y compris la barre de navigation, lors de l'utilisation de ScrollView et et NavigationView ensemble. Mais vous avez raison que je puisse toujours le remplacer pour des vues individuelles. Donc, si je pouvais trouver un moyen de régler l'apparence API à défaut, mon problème serait résolu.


Utilisez uniquement l'apparence () si SWIFTUI ne peut pas atteindre ce que vous voulez. Changer la couleur d'arrière-plan d'une vision de défilement à Swiftui ne devrait pas être un problème, il n'ya donc absolument aucun besoin d'apparence ()


@MaMaessen Malheureusement, modifiant la couleur de fond lors de l'utilisation de ScrollView et NavigationView est un très gros problème. Mais si vous voulez en savoir plus sur ce sujet, ici est une bonne question.



1
votes

L'arrière-plan par défaut de l'arrière-plan pour une feuille est SecondySystembackground. xxx


2 commentaires

Ok, maintenant après avoir modifié la question, je comprends votre problème.


Non, cela ne fonctionne pas non plus sans effets secondaires. Mais j'ai ajouté une description exacte des effets secondaires à la question.



1
votes

Vous pouvez spécifier une vue modale comme cas spécifique comme suit: xxx pré>

Si vous voulez un meilleur résultat, spécifiez simplement la sous-classe d'UiscrollView. P>

    UIScrollView.appearance().backgroundColor = UIColor.red
    UIScrollView.appearance(whenContainedInInstancesOf: [UIPresentationController.self]).backgroundColor = UIColor.clear
    UITableView.appearance(whenContainedInInstancesOf: [UIPresentationController.self]).backgroundColor = UIColor.secondarySystemBackground


2 commentaires

En tout cas intéressant, mais malheureusement, il y a les mêmes problèmes que dans la réponse de @Mamaessen


Vous pouvez toujours personnaliser la vue sur ce que vous attendiez.