2015-09-21 20 views
6

Jak przepisać sformatować visualAuto Layout: layoutMarginsGuide

addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|-[label]-|", options: .AlignAllBaseline, metrics: nil, views: ["label": label])) 
addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[label]-|", options: .AlignAllCenterX, metrics: nil, views: ["label": label])) 

przesuwając do prowadnic układ (z marginesami)?

Próbowałem go

label.topAnchor.constraintEqualToAnchor(layoutMarginsGuide.topAnchor).active = true 
label.leftAnchor.constraintEqualToAnchor(layoutMarginsGuide.leftAnchor).active = true 
label.bottomAnchor.constraintEqualToAnchor(layoutMarginsGuide.bottomAnchor).active = true 
label.rightAnchor.constraintEqualToAnchor(layoutMarginsGuide.rightAnchor).active = true 

ale nie działa. Nawet layoutMarginsGuide.layoutFrame nie ma oczekiwanej wartości (tak, nazywam ją w layoutSubviews po wykonaniu super). Ograniczenia są ustawione, ale zachowuje się tak, jakby był zerowy margines. Układa i podaje oczekiwany layoutFrame tylko wtedy, gdy margines układu jest ustawiony na wartość ujemną; co nie jest tym, co chcę oczywiście, ale pokazuje, że ograniczenia są ustawione z przewodnikami marginesów. Wygląda na to, że brakuje mi czegoś ...

Odpowiedz

11

Wydaje mi się, że layoutMarginsGuide nie jest gotowy w metodzie init UIView. Pojawiają się również podobne problemy, gdy ustawienie ograniczeń w updateConstraints po prostu działa. Wciąż sprawdzam, dlaczego.

AKTUALIZACJA: To, co próbowałem zrobić, to ustawienie layoutMargins, zanim widok został dodany do superview (w init). To nie zadziałało. To co pracowało to ustawianie ograniczeń w init, w stosunku do layoutMarginsGuide, ale w rzeczywistości ustawienie layoutMargins w viewDidMoveToSuperView.

+1

Jeśli coś znajdziesz, udostępnij. –

+0

zaktualizowałam moje odkrycia. – midas06

+0

Dobra ... fajny połów, ale to nie ma dla mnie sensu. Ponadto nowe 'layoutMargins' musi różnić się wartością. Ten sam problem tutaj: https://forums.developer.apple.com/message/93313. Wydaje się być błędem. –

4

zrobiłem kilka badań na kolejny, że skoro mamy teraz iOS 10. Oto co znalazłem:

  • Nadal nie działa niezawodnie. Mam na myśli ustawianie wiązań względem przewodnika marginesów układu w wyznaczonym inicjatorze bez żadnych dalszych działań.
  • Działa prawidłowo, jeśli rozmiar klatki> = marginesy układu dla określonego rozmiaru.
  • Jeśli zadzwonisz pod numer layoutMarginsGuide (nawet w przypadku print, nadal mówimy o połączeniach w ramach inicjalizatora), przekonasz ten przewodnik, aby nawet w późniejszym wywołaniu (na przykład w didMoveToWindow) to nie zadziała. Możesz go naprawić, ustawiając nowy layoutMargins (ale nowa wartość musi różnić się od starej).

Uważam, że jest to błąd i złożyłem go (proszę go również złożyć, aby mógł zostać poprawiony).

+0

Jeśli umieścisz radar na OpenRadar, i wspomniałeś tutaj swój numer radaru, łatwiej nam będzie powielić i mniej pracować dla peepów Apple'a, aby połączyć ze sobą radary. Dzięki za opublikowanie tego, bardzo mi pomogło! – Whakkee

Powiązane problemy