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ą:
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:
Scenariusz 2 :
Ustawienie (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)
w kodzie jest równoważne do:
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.
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ć.
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
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.
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;
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