2013-06-14 36 views
6

Mam widok przewijania z etykietą. Aby wyśrodkować etykietę w górnej środkowej, ja stosuje dwa ograniczenia do niego:Czarny ekran po ustawieniu translatesAutoresizingMaskIntoConstraints na NO

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-30-[questionLabel]" 
                  options:0 
                  metrics:0 
                   views:viewsDictionary]]; 
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.questionLabel 
               attribute:NSLayoutAttributeCenterX 
               relatedBy:NSLayoutRelationEqual 
                toItem:self 
               attribute:NSLayoutAttributeCenterX 
               multiplier:1.0 
                constant:.0]]; 

Bez ustawiania translatesAutoresizingMaskIntoConstraints dla questionLabel NO, będę napotkasz wyjątek rzucony przez Układ podstawowej. Ostrzega mnie, że nie może spełnić następujące ograniczenia:

(
"<NSLayoutConstraint:0x8e3baf0 V:|-(30)-[UILabel:0xa184ca0] (Names: '|':WLQuestionnaireSingleQuestionView:0xa184050)>", 
"<NSAutoresizingMaskLayoutConstraint:0x8e3efa0 h=--& v=--& UILabel:0xa184ca0.midY == + 15>" 

)

Tam widzę, że Układ Rdzeń starał się zaspokoić ograniczenie, które zostało automatycznie wygenerowane być wstecznie kompatybilne z maską automatycznej zmiany rozmiaru. W moim rozumieniu, poprawka dla tego powinna polegać na ustawieniu translatesAutoresizingMaskIntoConstraints na NO, ale niestety to spowoduje kompletnie czarny ekran, brak komunikatów debugowania.

Zaimplementowałem widok programowo, bez stalówek.

+1

Walczę z tym samym typem zachowania. znalazłeś obejście? – topwik

+0

Mam ten sam problem. – clearwater82

+0

Przykro mi, to było zbyt dawno temu i nie mam już dostępu do źródła. Uważam, że było obejście problemu jako bardzo konkretne rozwiązanie mojego problemu (prawdopodobnie przede wszystkim unikanie tego problemu), ale nie mogę powiedzieć, że mam teraz rozwiązanie tego konkretnego problemu. – ff10

Odpowiedz

0

Cóż, widzę, że to pytanie jest już dość stare. Chciałbym jednak odpowiedzieć na to pytanie, ponieważ może to być interesujące dla innych. Ponieważ korzystasz z trybu AutoLayout, rozmiar zawartości jest określany przez wiązania. Ponieważ nie masz ograniczenia od widoku do dołu, wysokość nie może być ustawiona poprawnie. To samo dotyczy szerokości, ponieważ nie określono żadnej szerokości dla widoku. Właśnie powiedziałeś AutoLayout, że powinien on znajdować się w centrum widoku. Twój problem może zostać rozwiązany za pomocą następującego kodu (szerokość widoku = 40):

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(30)-[questionLabel]|" 
                 options:0 
                 metrics:0 
                  views:viewsDictionary]]; 
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.questionLabel 
               attribute:NSLayoutAttributeCenterX 
               relatedBy:NSLayoutRelationEqual 
                toItem:self 
               attribute:NSLayoutAttributeCenterX 
               multiplier:1.0 
                constant:.0]]; 
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[questionLabel(40)]", options: 0, metrics: 0, views: viewsDictionary]]; 
Powiązane problemy