Voici ma configuration: j'ai un UIScrollView
bord avant, supérieur et d'essai défini sur 0. À l'intérieur, j'ajoute un UIStackView
avec ces contraintes:
stackView.centerYAnchor.constraintEqualToAnchor(selectedContactsScrollView.centerYAnchor).active = true
stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor).active = true
Dans la vue de la pile, j'ajoute quelques vues.
Mon problème est qu'en raison des contraintes, la première vue ajoutée à la vue de la pile aura également un bord avant = 0.
Comment puis-je ajouter du remplissage à la première vue? Sans ajuster les contraintes de la vue de défilement.
ios
swift
uiscrollview
uistackview
Adrian
la source
la source
Réponses:
La solution que vous avez fournie n'ajoute pas de remplissage pour vos vues à l'intérieur de votre UIStackView (comme vous le vouliez dans la question), mais elle ajoute une tête pour UIStackView.
Une solution pourrait être d'ajouter un autre UIStackView à l'intérieur de votre UIStackView d'origine et de donner le début à ce nouveau UIStackVIew. Ensuite, ajoutez vos vues à ce nouveau UIStackView.
Astuce, vous pouvez le faire complètement en utilisant Interface Builder. En d'autres termes, pas besoin d'écrire du code pour cela.
la source
Lorsque la
isLayoutMarginsRelativeArrangement
propriété est true, la vue de la pile met en page ses vues organisées par rapport à ses marges de disposition.Mais cela affecte toutes les vues organisées à l'intérieur de la vue de pile. Si vous souhaitez ce remplissage pour une seule vue organisée, vous devez utiliser
UIStackView
la source
isLayoutMarginsRelativeArrangement
est un getter, un setter estlayoutMarginsRelativeArrangement
. Je ne peux pas modifier la réponselayoutMarginsRelativeArrangement
place. Documentation officielle: developer.apple.com/reference/uikit/uistackview/…stackView.layoutMargins = UIEdgeInsetsMake(0, 20, 0, 20); [stackView setLayoutMarginsRelativeArrangement:YES];
J'ai trouvé que les contraintes ne fonctionnent pas dans une vue de pile, ou elles semblent quelque peu étranges.
(Par exemple, si j'ajoute une contrainte de début / de fin à la sélection sur la vue de la pile de l'image, cela ajoute également le menant à la vue de collection, mais n'ajoute pas de fin; et il y a un conflit à coup sûr).
Pour définir les marges de mise en page pour toutes les vues à l'intérieur de la vue de pile, sélectionnez:
Stack View > Size Inspector > Layout Margins > Fixed
Remarque: l'
"Fixed"
option était anciennement appelée"Explicit"
, comme le montrent les captures d'écran.Ajoutez ensuite votre rembourrage:
la source
Ce qui a fonctionné pour moi, c'est d'ajouter à la vue de la pile un autre UIView qui n'est qu'un espaceur (fonctionne au moins avec stackView.distribution = .Fill):
la source
swift 3: il vous suffit de définir le décalage de:
Assurez-vous que cette contrainte est définie après
parentView.addArrangdSubView(firstView)
la source
Si vous n'avez besoin que d'un remplissage de début, vous pouvez définir l'alignement de la vue de pile sur "Fin" et vous serez alors libre de spécifier des contraintes de début uniques sur chacune de ses sous-vues contenues.
En prime, vous pouvez également définir l'alignement de la vue de la pile sur "Centre", puis vous pouvez utiliser les contraintes de début et / ou de fin pour donner à chaque élément son propre remplissage des deux côtés.
la source
Cette question a déjà de bonnes réponses, une suggestion cependant, utilisez la
spacing
propriété pour définir l'espacement entre les vues. Pour la première et la dernière vue, il peut y avoir deux options, soit définir des insertions comme @tolpp suggéré, soit ajouter une contrainte attachée au parent (stackview) avec une constante pour ajouter un remplissage.la source
La solution serait d'avoir une vue régulière dans la vue de la pile pour contenir les vues auxquelles vous souhaitez ajouter des contraintes, puis vous pouvez ajouter des contraintes pour vos éléments qui sont relatives aux vues de la vue de la pile. De cette façon, vos vues d'origine peuvent avoir des contraintes de début et de fin dans la vue de pile.
Cela peut être fait dans le générateur d'interface et par programme.
la source
Ce que nous avons fait a été d'ajouter des composants transparents (par exemple, UIButton / UIView) en tant que premier et dernier enfants de UIStackView. Ensuite, définissez contraindre la largeur de ces enfants invisibles pour ajuster le remplissage.
la source
Il semble que la solution était assez simple. Au lieu de:
Je viens d'écrire:
la source