J'ai essayé de changer l' UIStackView
arrière - plan de clair à blanc dans l'inspecteur Storyboard, mais lors de la simulation, la couleur d'arrière-plan de la vue de la pile a toujours une couleur claire.
Comment puis-je changer la couleur d'arrière-plan d'un UIStackView
?
ios
swift
uistackview
LukasTong
la source
la source
Réponses:
Référence de ICI .
ÉDITER:
Vous pouvez ajouter une sous-vue à
UIStackView
comme mentionné ICI ou dans cette réponse (ci-dessous) et lui attribuer une couleur. Découvrez ci-dessousextension
pour cela:Et vous pouvez l'utiliser comme:
la source
drawRect()
est appelé. Vous pouvez simplement tester en sousUIStackView
if let backgroundView = self.subviews.first(where: {$0.tag == 123}) {
. Si tel est le cas, je change la couleur d'arrière-plan de cette vue.Je fais ça comme ça:
Fonctionne comme un charme
la source
@IBDesignable class StackView
Ce qui vous permettra de concevoir sur Story board. Je ne me soucie pas beaucoup de l'ajout d'un arrière-plan au moment de l'exécution, mais il est très difficile de concevoir le stackview quand il n'a pas de couleur sur leUIStackView
est un élément sans rendu, et en tant que tel, il n'est pas dessiné à l'écran. Cela signifie que changerbackgroundColor
ne fait essentiellement rien. Si vous souhaitez changer la couleur d'arrière-plan, ajoutez-y simplement unUIView
sous-vue (qui n'est pas organisé) comme ci-dessous:la source
Le moyen le plus simple, le plus lisible et le moins piraté serait peut-être d'intégrer le
UIStackView
dans unUIView
et de définir la couleur d'arrière-plan de la vue.Et n'oubliez pas de configurer correctement les contraintes de mise en page automatique entre ces deux vues… ;-)
la source
Pitiphong est correct, pour obtenir une vue de pile avec une couleur d'arrière-plan, faites quelque chose comme ce qui suit ...
Cela vous donnera une vue de la pile dont le contenu sera placé sur un fond rouge.
Pour ajouter un remplissage à la vue de la pile afin que le contenu ne soit pas aligné avec les bords, ajoutez ce qui suit dans le code ou sur le storyboard ...
la source
TL; DR: La façon officielle de le faire est d'ajouter une vue vide dans la vue de la pile à l'aide de la
addSubview:
méthode et de définir à la place l'arrière-plan de la vue ajoutée.L'explication: UIStackView est une sous-classe UIView spéciale qui ne fait que la mise en page et non le dessin. Tant de ses propriétés ne fonctionneront pas comme d'habitude. Et comme UIStackView ne mettra en page que ses sous-vues organisées, cela signifie que vous pouvez simplement lui ajouter un UIView avec
addSubview:
méthode, définir ses contraintes et sa couleur d'arrière-plan. C'est le moyen officiel de réaliser ce que vous voulez cité lors de la session WWDCla source
Cela fonctionne pour moi dans Swift 3 et iOS 10:
la source
Dans iOS10, la réponse de @ Arbitur nécessite un setNeedsLayout une fois la couleur définie. Voici le changement nécessaire:
la source
backgroundColor
avant de l'ajouter à un,superview
cela fonctionne sur ios10 et ios9, cependant, si vous avez mis à jourbackgroundColor
après que salayoutSubviews()
fonction a été appelée, cela ne mettrait tout simplement pas à jourbackgroundColor
labackgroundLayer
signification aucune mise à jour visuelle. Corrigé maintenant, merci de l'avoir signalé.Voici un bref aperçu de l'ajout d'une couleur d'arrière-plan de la vue Pile.
Création d'une vue d'arrière-plan avec des coins arrondis
Pour le faire apparaître comme arrière-plan, nous l'ajoutons au tableau de sous-vues de la vue de pile racine à l'index 0. Cela le place derrière les vues arrangées de la vue de pile.
Ajoutez des contraintes pour épingler le backgroundView aux bords de la vue de pile, en utilisant une petite extension sur UIView.
appeler le
pinBackground
deviewDidLoad
Référence de: ICI
la source
Xamarin, version C #:
la source
Vous pourriez faire une petite extension de
UIStackView
Usage:
la source
la source
Sous-classe UIStackView
Puis dans ta classe
la source
Vous pouvez insérer une sous-couche dans StackView, cela fonctionne pour moi:
la source
Je suis un peu sceptique quant au sous-classement des composants de l'interface utilisateur. C'est comme ça que je l'utilise,
Et c'est l'usage,
Remarque: Avec cette approche, si vous souhaitez définir une bordure, vous devez la définir
layoutMargins
sur stackView afin que la bordure soit visible.la source
Vous ne pouvez pas ajouter d'arrière-plan à stackview. Mais ce que vous pouvez faire, c'est ajouter stackview dans une vue, puis définir l'arrière-plan de la vue, cela fera le travail. * Cela n'interrompra pas les flux de stackview. J'espère que cela aidera.
la source
Nous pouvons avoir une classe personnalisée
StackView
comme celle-ci:Et il peut être utilisé comme ceci:
C'est légèrement mieux que d'ajouter une fonction d'extension
func addBackground(color: UIColor)
comme suggéré par d'autres. La vue d'arrière-plan est paresseuse de sorte qu'elle ne sera pas créée tant que vous n'appelerez passtackView.backgroundView.backgroundColor = ...
. Et la définition / modification de la couleur d'arrière-plan plusieurs fois n'entraînera pas l'insertion de plusieurs sous-vues dans la vue de la pile.la source
Si vous souhaitez contrôler à partir du concepteur lui-même, ajoutez cette extension à la vue de la pile
la source
Vous pouvez le faire comme ceci:
En fournissant une extension pour remplacer
backgroundColor
:la source
Essayez BoxView . Il est similaire à UIStackView, mais il est rendu et prend en charge plus d'options de mise en page.
la source