Jak dodać interlinię do widoku dodanego w widoku UIStackView

To jest moja konfiguracja: mam UIScrollView z wiodącą,górną, trialingową krawędzią ustawioną na 0. W środku dodaję UIStackView z tym ograniczeniem:

stackView.centerYAnchor.constraintEqualToAnchor(selectedContactsScrollView.centerYAnchor).active = true  
stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor).active = true

Wewnątrz widoku stosu dodaję kilka widoków.
Mój problem polega na tym, że z powodu ograniczeń pierwszy widok dodany do widoku stosu będzie miał również krawędź wiodącą = 0.

Jakie są sposoby na dodanie wypełnienia do pierwszego widoku ? Bez dostosowywania ograniczeń widoku przewijania.

Author: Kobe, 2015-09-13

9 answers

Podane rozwiązanie nie dodaje wypełnienia dla widoków wewnątrz widoku UIStackView( jak chciałeś w pytaniu), ale dodaje interlinię dla widoku UIStackView.

Rozwiązaniem może być dodanie innego widoku UIStackView wewnątrz oryginalnego widoku UIStackView i podanie prowadzącego do tego nowego widoku UIStackVIew. Następnie dodaj swoje widoki do tego nowego widoku UIStackView.

Podpowiedź, możesz to zrobić całkowicie za pomocą Kreatora interfejsów. Innymi słowy, nie ma potrzeby pisania kodu do niego.

 16
Author: William Kinaan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-15 08:32:18

Gdy właściwość isLayoutMarginsRelativeArrangement jest prawdziwa, widok stosu będzie układał swoje ułożone widoki względem marginesów układu.

stackView.layoutMargins = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)
stackView.isLayoutMarginsRelativeArrangement = true

Ale wpływa na wszystkie ułożone widoki wewnątrz widoku stosu. Jeśli chcesz, aby to wypełnienie było tylko dla jednego ułożonego widoku, musisz użyć zagnieżdżonego UIStackView

 232
Author: tolpp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-17 08:30:14

Odkryłem, że ograniczenia tam nie działają lub działają trochę dziwnie(na przykład, jeśli dodam ograniczenie wiodące/końcowe do wybranego na obrazie stackview, to dodaje również prowadzenie do collectionview, ale nie dodaje końców; i na pewno jest to konflikt).

stackview wewnątrz stackview

Więc można zrobić marginesy układu dla wszystkich widoków / stackview wewnątrz stackview.

Wybierz Inspektor rozmiaru -> marginesy układu (explicit ) - > dodaj swój padding

storyboard

 109
Author: Aleksandr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-04 12:11:30

Dla mnie zadziałało dodanie do widoku stosu innego interfejsu użytkownika, który jest tylko spacją (działa przynajmniej ze stackView.Dystrybucja = ."Wypełnienie"): {]}

let spacerView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
stackView.addArrangedSubview(spacerView)
stackView.addArrangedSubview(viewThatNeedsSpaceBeforeIt)
stackView.addArrangedSubview(NextView)...
 8
Author: dorsz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-05 08:10:10

Użyj odstępów, aby rozmieścić elementy w widoku stosu:

        let bottomStackView = UIStackView()
        bottomStackView.alignment = .Center
        bottomStackView.axis = .Horizontal
        bottomStackView.spacing = 8.0
 5
Author: P5ycH0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-30 11:29:51

Swift 3: Wystarczy ustawić przesunięcie przez:

firstView.leadingAnchor.constraint(equalTo: parentView.leadingAnchor, constant: 200).isActive = true

Upewnij się, że to ograniczenie ustawione po parentView.addArrangdSubView(firstView)

 3
Author: William Hu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-06 08:37:26

Jeśli potrzebujesz tylko wypełnienia interlinii, możesz ustawić wyrównanie widoku stosu na "końcowe", a następnie możesz dowolnie określać unikalne ograniczenia interlinii dla każdego z zawartych w nim podwidów.

Jako bonus Możesz również ustawić wyrównanie widoku stosu na "środek", a następnie użyć ograniczeń prowadzących i / lub kończących, aby nadać każdemu elementowi własne wypełnienie po obu stronach.

 2
Author: Jonathan Parham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-16 21:17:16

Wydaje się, że rozwiązanie było dość proste. Zamiast:

stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor).active = true

Właśnie napisałam:

stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor, constant: 15).active = true
 0
Author: Kobe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-13 16:58:21

Dodaliśmy przezroczyste komponenty (np. UIButton/UIView) jako pierwsze i ostatnie dzieci UIStackView. Następnie Ustaw ogranicz szerokość tych niewidocznych dzieci, aby dostosować wyściółkę.

 0
Author: Crashalot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-20 01:49:39