2013-01-07 12 views
32

Muszę ustawić translatesAutoresizingMaskIntoConstraints na NO. Domyślnie jest ustawiony na YES (aby pomóc większości aplikacji, które przechodzą z kolumn i sprężyn do nowego układu automatycznego).Gdzie ustawić translatingAutoresizingMaskIntoConstraints w Xcode 4.5

Czy jest gdzieś w Xcode, gdzie domyślny można zmienić z YES na NO?

Czy muszę ręcznie ustawić go dla każdego widoku?

Odpowiedz

17

To jest świetne pytanie - i próbowałem znaleźć dla siebie odpowiedź. Niestety, wygląda na to, że nie ma "szybkiej naprawy". Obecnie, Apple uważa Ograniczenie oparte układ Opt-in - nawet nazywania odcinek UIView Class Reference:

decydując się na ograniczenie-Based Layout

Ale Opt-in nie jest globalny. Przypuszczam, że to dlatego, że nie wszystko wygląda dobrze, jeśli po prostu zmienisz sprężyny & Struts w Constraints. Niektóre elementy interfejsu użytkownika zrywają się lub można uzyskać mnóstwo niedopasowanych błędów ograniczeń.

mogę myśleć o jednej możliwe rozwiązania - nie próbowałem go samodzielnie, ale można zrobić kategorię na UIView że ustawia wszystkieUIView obiektów, aby powrócić NO dla - (BOOL)translatesAutoresizingMaskIntoConstraints. Chociaż nie wiem, co by to pękło, ustawiłoby to globalnie translatesAutoresizingMaskIntoConstraints na NO.

Oto a good introduction to Categories if you want to learn more about them!

+0

Jak używać kategorię, aby ustawić cały obiekt UIView do powrotu nie? Metoda kategorii dotyczy tylko instancji. – Boon

+2

Ta odpowiedź została zaakceptowana, ale czy to zadziałało?Spodziewam się, że takie podejście będzie problematyczne. –

+0

Metoda kategorii dłubie oryginalną metodę @Boon, a każda instancja używa nowej implementacji. [Chyba że oryginalna metoda została sama zaimplementowana w kategorii] (http://stackoverflow.com/a/7013922/603977). –

3

Kiedy trzeba zmienić rozmiar lub pozycję swojego wydziału. Użyj metody (BOOL)translatesAutoresizingMaskIntoConstraints, zanim ustawisz ramę swojego podglądu.

[self.benchmarkButton removeFromSuperview]; 
[self.benchmarkButton setTranslatesAutoresizingMaskIntoConstraints:YES]; 
[self.benchmarkButton setFrame:CGRectMake(20, self.benchmarkButton.frame.origin.y+40, 260, 30)]; 
[self.benchmarksView addSubview:self.benchmarkButton]; 

Ów sposób swoją subview nie będą walczyć z ograniczeniami, jak to jest domyślna (autoLayout) w Xcode 4.3 i nowszych. Dzięki

+0

Fajnie, ale domyślam się, że możesz skończyć z konfliktami robiącymi to w ten sposób, zamiast myśleć o pracy z istniejącymi ograniczeniami. –

17

Spóźniłem się na to pytanie, ale wspomniana opcja nadal nie występuje w Xcode 5 & 6, więc pytanie jest nadal znaczące.

W rzeczywistości zawsze możemy ustawić wartość dowolnej właściwości widoku/kontrolki/obiektu poprzez dodanie User Defined Runtime Atribute w Storyboard (Interface Builder), jak na poniższym zrzucie ekranu.

Działa również dla translatesAutoresizingMaskIntoConstraints. Więc pytanie można rozwiązać.

enter image description here

+0

To jest sprytne rozwiązanie, ale uważam, że powodowało to "zamrożenie" w XCode 6.3 beta 2. Kiedy go usunąłem, mój widok został poprawnie załadowany .. ale wraz z nim nastąpił awaria po uaktualnieniu do wersji beta 2. –

+2

działa poprawnie w XCode 9 i iOS 11 dla każdego, kto szuka zaktualizowanego rozwiązania. To powinna być teraz akceptowana odpowiedź. – JasonD

Powiązane problemy