Programowa automatyzacja masek vs Interface Builder / xib / nib

Byłem w (prawdopodobnie fałszywe) założenie, że włączenie wskaźnika prawego marginesu w xib jest równoznaczne z użyciem UIViewAutoresizingFlexibleLeftMargin wewnątrz kodu i tak dalej.

Więc, kiedyś myślałem zgodnie z tym migawką: Tutaj wpisz opis obrazka

Później dzisiaj musiałem sprawdzić i natknąłem się na Ten wątek.

A także dokumentacja apple, zatytułowana sekcją z tytułem - "Obsługa zmian układu automatycznie za pomocą reguł Autoresizingu" w tym linku: https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/CreatingViews.html

Więc teraz mam nową koncepcję w moim umyśle, jak ustawianie automatyzujących masek programowo byłoby równoważne ustawieniom xib: {]}

Scenariusz 1 : Ustawienie tylko (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight) jest równoważne:

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)

W XIB?

Scenariusz 2 : Ustawienie (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin) w kodzie jest równoważne do:

(Uiviewautoresizingflexibllewidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottommargin)

W XIB? Czy moje 2 nowe scenariusze są prawidłowe? Czy teraz rozumiem?
Author: Cœur, 2011-10-13

4 answers

Tak, Interface Builder ma to "odwrócone" w pewnym sensie(lub UIView, w zależności od tego, jak na to patrzysz). Twoje cytowane "scenariusze" są poprawne.

 35
Author: DarkDust,
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
2011-10-13 14:33:50

Tak, cytowałeś rzeczy poprawnie. Zgadzam się również, że czuje się trochę wstecz, więc z tego powodu doceniam twój post.

Możesz chcieć użyć makra preprocesora UIViewAutoresizingFlexibleMargins podczas uelastyczniania marginesu UIView w każdym kierunku. Umieściłem to w wstępnie skompilowanym pliku nagłówkowym, aby było wszędzie.

#define UIViewAutoresizingFlexibleMargins                 \
              UIViewAutoresizingFlexibleBottomMargin    | \
              UIViewAutoresizingFlexibleLeftMargin      | \
              UIViewAutoresizingFlexibleRightMargin     | \
              UIViewAutoresizingFlexibleTopMargin

Użycie UIViewAutoresizingFlexibleMargins sprawi, że element UI pozostanie wyśrodkowany, ponieważ nie będzie przytulał żadnej ze stron. Aby element rosł / kurczył się wraz z jego rodzicem, Ustaw UIViewAutoresizingFlexibleWidth i UIViewAutoresizingFlexibleHeight odpowiednio.

Lubię używać UIViewAutoresizingFlexibleMargins, ponieważ mogę później odnieść się do niego tak:

myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;

Zamiast

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;

Wszystkie często widzę te marginesy lub " razem w jednej linii, jak w powyższym przykładzie. Trudno to odczytać.

 47
Author: Sam,
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
2011-10-19 17:54:39

Tutaj wpisz opis obrazka

Włączenie strzałki pionowej / poziomej (zwanej sprężyną) wewnątrz pudełka uelastyczni wysokość/szerokość. Ale włączenie zewnętrznej linii (zwanej strut) {[9] } sprawi, że ta strona będzie nieelastyczna / nieelastyczna.

Włączenie zewnętrznej lewej linii (lewa strut) nie jest równoznaczne z włączeniem UIViewAutoresizingFlexibleRightMargin. Zamiast, UIViewAutoresizingFlexibleRightMargin = on if right strut disabled, off if right strut enabled.

Na początku jest to dość mylące, ale jeśli widzisz dokładnie, jest różnica w sprężynach i rozpórkach. Nie wiem, dlaczego Apple to zrobił, ale dla mnie, były przypadki, w których było łatwiejsze w użyciu. Używanie przeciwnych właściwości w kodzie jest jeszcze bardziej mylące.
 0
Author: Abdurrahman Mubeen Ali,
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-06-07 10:03:26

Swift 4 użyj tego

gadBannerView?.autoresizingMask = [.flexibleRightMargin  , .flexibleLeftMargin , .flexibleTopMargin , .flexibleBottomMargin]

Objective-C

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
 0
Author: Muhammad Nayab,
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-07 14:08:36