2012-10-09 18 views
16

Utworzono UIView zastosowaniem kodu wewnątrz viewDidLoad (gdzie 'secondview' oczywiście jest nazwą UIView)Jak dodawać ograniczenia programowo do programowo utworzonego UIView?

secondview = [[UIView alloc] initWithFrame:self.view.frame]; 
    [secondview setBackgroundColor: [UIColor yellowColor]]; 
    secondview.translatesAutoresizingMaskIntoConstraints = NO; 
    [self.view addSubview:secondview]; 

Następnie w ciągu viewDidAppear I dodaje ograniczenia do tego widoku:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:secondview attribute:NSLayoutAttributeRight 
    relatedBy:NSLayoutRelationEqual 
    toItem:self.view 
    attribute:NSLayoutAttributeRight 
    multiplier:1.0f constant:-20.0f]; 
[self.view addConstraint:constraint]; 

Jednak ograniczenia nie są stosowane do widoku (co najmniej nie mogę zobaczyć). Zamiast tego widok po prostu wydaje się znikać z ekranu. Jeśli jednak kod ograniczenia zostanie skomentowany, widok ponownie ładuje się z odpowiednią ramką (oczywiście bez zastosowanych ograniczeń). Stosując te same ograniczenia do przycisku lub ImageView, wiązania są stosowane idealnie. Doprowadziło to mnie do myślenia, że ​​problem jest spowodowany "initWithFrame" podczas tworzenia widoku, ponieważ ani przycisk, ani ImageView faktycznie nie wymagają jego rozmiaru do określenia.

Jakie są Twoje myśli? Co powinienem zrobić inaczej?

Odpowiedz

12

Dla każdego, kto się na to natknie ... Musiałem dodać więcej niż jedno ograniczenie. To wystarczyło.

+1

Tak, to też pomogło mi. Najwyraźniej potrzebujesz co najmniej dwóch wiązań lub widok nie będzie wyświetlany. – JasonD

+1

Potrzebujesz tyle, ile potrzeba, aby usunąć niejednoznaczność. Może to być tylko dwa, ale czasem więcej. (Etykiety na przykład wymagają co najmniej dwóch, może wywnioskować rozmiar z tekstu, ale trzeba nadać mu X i Y) – LightningStryk

Powiązane problemy