2
votes

Comment définir la couleur d'arrière-plan d'UIView à l'intérieur de UIStackView?

Je crée un écran de détail qui a plusieurs vues imbriquées dans le contrôleur de vue Storyboard: ScrollView> UIView> StackView> 5 vues de l'interface utilisateur. Chaque vue de l'interface utilisateur est une section différente qui contient des étiquettes et des textes d'édition.

Lorsque je définis l'arrière-plan de l'une des UIViews dans le storyboard, cela change mais ne reflète pas ce changement lorsque j'exécute l'émulateur ou sur un iPad.

Voici une image avec la vue de l'émulateur activée la gauche et le Storyboard dans Xcode sur la droite. Vous pouvez voir que l'émulateur n'affiche aucune couleur d'arrière-plan sur l'UIView imbriqué alors que le Storyboard le fait.

Emulator vs Storyboard

Parce qu'il a été demandé, voici le Storyboard complet. C'est difficile à voir, mais c'est un contrôleur de vue par onglets connecté à trois contrôleurs de vue fractionnée.

Storyboard complet

En testant uniquement des vues spécifiques, je l'ai réduit à l'UIStackView contenant les 5 UIViews qui causent le problème. J'ai essayé de joindre un contrôleur et de changer la couleur du code mais rien de ce que j'ai essayé ne semble le changer.

class ClientDetailViewController: UIViewController {

@IBOutlet weak var basicInfoUIView: UIView!

override func viewDidLoad() {
    super.viewDidLoad()

    basicInfoUIView.backgroundColor = UIColor.init(displayP3Red: 22, green: 22, blue: 22, alpha: 0.5)
    }
}

Je m'attends à ce que chaque section (UIView) soit sombre couleur grise mais à la place ils sont tous clairs pour que la couleur d'arrière-plan du scrollview soit visible.


4 commentaires

Je ne sais pas de quoi vous parlez - tout sur Storyboard apparaîtra. Vous avez des images?


Je viens d'ajouter une image de mon émulateur et de mon storyboard afin que vous puissiez voir la différence entre ce que le Storyboard dit va apparaître et ce qui apparaît réellement.


Puis-je voir plus de votre storyboard, pas trop inquiet pour le simulateur


Bien sûr, j'ai ajouté un autre lien avec l'ensemble du Storyboard. Il est difficile de voir quels sont les composants individuels, alors faites-moi savoir si je peux clarifier quelque chose pour vous.


3 Réponses :


1
votes

 entrez la description de l'image ici Je pense que vous devriez d'abord donner différentes couleurs d'arrière-plan à vos vues d'interface utilisateur, puis les placer. Sous une seule pile et vérifiez si cela fonctionne ou non

J'ai ajouté une capture d'écran où j'ai d'abord donné des couleurs d'arrière-plan aux UIviews, puis les ai placées sous un stackView, mais elles avaient ces couleurs contrairement à vous après leur avoir donné une couleur d'arrière-plan simplement à partir des uielements sous le contrôleur à gauche, choisissez les Uiviews et placez-les les sous la vue de la pile


2 commentaires

Vous pouvez donner des suggestions sous forme de commentaire au lieu de réponse lorsque vous ne savez pas si cela fonctionnera ou non.


J'ai essayé cela aussi lors du dépannage dès que la vue est placée dans une pile, les couleurs disparaissent.



0
votes

Eh bien, vérifiez votre couleur s'il vous plaît. 22 ne doit pas appartenir à [0,1].

basicInfoUIView.backgroundColor = UIColor.init(displayP3Red: 22.0 / 255.0, green: 22.0 / 255.0, blue: 22.0 / 255.0, alpha: 0.5)


13 commentaires

L'ajout des couleurs comme vous l'avez montré dans votre exemple, ou même en disant UIColor.black, ne montre aucun changement sur le simulateur ou l'iPad.


Ne pas ajouter, remplacer le mauvais code dans la vue a été chargé.


Désolé, je voulais dire que j'ai remplacé ma réplique par celle que tu m'as donnée. J'ai également essayé de remplacer ma ligne par basicInfoView.backgroundColor = UIColor.black et je n'ai toujours rien vu.


quel est le basicInfoUIView? Je l'assigne à la première vue de la stackView


La première vue est une UIView que j'ai placée dans ScrollView pour m'aider à contraindre la vue de pile car sans elle, le reste des vues finirait par disparaître. Dans l'image que j'ai liée "Emulator vs Storyboard", vous pouvez voir la vue d'informations de base colorée en noir sur le Storyboard sans avoir de couleur sur l'émulateur.


Je vois. Je demande si *** @IBOutlet faible var basicInfoUIView: UIView! *** lié à l'une des vues dans IB?


Je comprends maintenant. Oui en haut j'ai la ligne @IBOutlet faible var basicInfoUIView: UIView! connecter la vue dans le Storyboard à la classe. Je me suis également assuré d'ajouter la classe dans l'inspecteur d'identité.


Le basicInfoUIView est-il la première vue de stackView?


Oui, c'est la première vue de stackView.


puis nettoyez la reconstruction après avoir changé la couleur.


Cela ne semble pas non plus l'aider. De plus de dépannage, il semble qu'une fois que j'ai épinglé les vues de stackView à l'UIView, les couleurs disparaissent.


Que diriez-vous de définir la couleur dans viewWillAppear ou viewdidappear


Cela ne semble pas non plus le faire. En fait, tout ce que j'essaye de faire cause beaucoup plus d'erreurs. Dans les rares cas où la couleur d'arrière-plan apparaît, les vues sont réparties de manière aléatoire sur l'écran et rien n'est identique à ce qu'il apparaît dans mon Storyboard. C'est extrêmement frustrant.



2
votes

UIStackView ne permet pas de changer la couleur d'arrière-plan:

UIStackView est une sous-classe non-rendu de UIView; autrement dit, il ne fournit aucune interface utilisateur propre. Au lieu de cela, il gère simplement la position et la taille de ses vues disposées. Par conséquent, certaines propriétés (comme backgroundColor) n'ont aucun effet sur la vue de la pile. De même, vous ne pouvez pas remplacer layerClass, draw ( :) ou draw (: in :).

(depuis UIStackView )

Une solution simple consiste à ajouter un autre UIView derrière la vue de la pile, à configurer les contraintes pour qu'elles correspondent à la position et à la taille de la vue de la pile (égale en haut, à gauche, à droite, en bas) et à changer la couleur d'arrière-plan de cette vue.


0 commentaires