To jest moja konfiguracja: mam UIScrollView
wiodącą, górną, próbną krawędź ustawioną na 0. Wewnątrz tego dodaję UIStackView
z następującymi ograniczeniami:
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 ze względu na ograniczenia pierwszy widok dodany do widoku stosu również będzie miał krawędź natarcia = 0.
W jaki sposób mogę dodać dopełnienie do pierwszego widoku? Bez dostosowywania ograniczeń widoku przewijania.
ios
swift
uiscrollview
uistackview
Adrian
źródło
źródło
Odpowiedzi:
Rozwiązanie, które podałeś, nie dodaje dopełnienia dla twoich widoków w twoim UIStackView (jak chciałeś w pytaniu), ale dodaje wiodący dla UIStackView.
Rozwiązaniem mogłoby być dodanie kolejnego UIStackView w oryginalnym UIStackView i podanie prowadzącego do tego nowego UIStackVIew. Następnie dodaj swoje widoki do tego nowego UIStackView.
Wskazówka, możesz to zrobić całkowicie za pomocą Interface Builder. Innymi słowy, nie ma potrzeby pisania kodu.
źródło
Gdy
isLayoutMarginsRelativeArrangement
właściwość ma wartość true, widok stosu układa rozmieszczone widoki względem marginesów układu.Ale ma to wpływ na wszystkie rozmieszczone widoki wewnątrz widoku stosu. Jeśli chcesz, aby dopełnienie dotyczyło tylko jednego widoku ułożonego, musisz użyć zagnieżdżonego
UIStackView
źródło
isLayoutMarginsRelativeArrangement
jest getter, setter jestlayoutMarginsRelativeArrangement
. Nie mogę edytować odpowiedzilayoutMarginsRelativeArrangement
zamiast tego używać . Oficjalna dokumentacja: developer.apple.com/reference/uikit/uistackview/…stackView.layoutMargins = UIEdgeInsetsMake(0, 20, 0, 20); [stackView setLayoutMarginsRelativeArrangement:YES];
Odkryłem, że ograniczenia nie działają w widoku stosu lub wydają się nieco dziwne.
(Na przykład jeśli dodam ograniczenie wiodące / końcowe do zaznaczonego w widoku stosu obrazu, które dodaje również wiodący do widoku kolekcji, ale nie dodaje końca; i na pewno będzie to konflikt).
Aby ustawić marginesy układu dla wszystkich widoków w widoku stosu, wybierz:
Stack View > Size Inspector > Layout Margins > Fixed
Uwaga:
"Fixed"
opcja była wcześniej nazywana"Explicit"
, jak widać na zrzutach ekranu.Następnie dodaj wypełnienie:
źródło
Pomogło mi dodanie do widoku stosu innego UIView, który jest tylko odstępnikiem (działa przynajmniej z stackView.distribution = .Fill):
źródło
swift 3: Wystarczy ustawić przesunięcie przez:
Upewnij się, że to ograniczenie jest ustawione po tobie
parentView.addArrangdSubView(firstView)
źródło
Jeśli potrzebujesz tylko początkowego wypełnienia, możesz ustawić wyrównanie widoku stosu na „Końcowe”, a wtedy będziesz mógł określić unikalne Wiodące ograniczenia dla każdego z zawartych w nim podwidoków.
Jako bonus możesz również ustawić wyrównanie widoku stosu na „Środek”, a następnie możesz użyć ograniczeń wiodących i / lub końcowych, aby nadać każdemu elementowi własne wypełnienie po obu stronach.
źródło
To pytanie ma już dobre odpowiedzi, choć jedna sugestia, użyj
spacing
właściwości, aby ustawić odstępy między widokami. Dla pierwszego i ostatniego widoku mogą być dwie opcje, albo ustaw wstawki zgodnie z sugestią @tolpp, albo dodaj ograniczenie dołączone do elementu nadrzędnego (widok stosu) ze stałą, aby dodać wypełnienie.źródło
To, co zrobiliśmy, to dodanie przezroczystych komponentów (np. UIButton / UIView) jako pierwszego i ostatniego elementu podrzędnego UIStackView. Następnie ustaw ograniczenie szerokości tych niewidocznych elementów potomnych, aby dostosować wyściółkę.
źródło
Rozwiązaniem byłoby posiadanie zwykłego widoku w widoku stosu, który będzie zawierał wszystkie widoki, do których chcesz dodać ograniczenia, a następnie możesz dodać ograniczenia dla elementów, które są względne w stosunku do widoków w widoku stosu. W ten sposób oryginalne widoki mogą mieć wiodące i końcowe ograniczenia w widoku stosu.
Można to zrobić w kreatorze interfejsów i programowo.
źródło
Wydaje się, że rozwiązanie było dość proste. Zamiast:
Właśnie napisałem:
źródło