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?
Tak, to też pomogło mi. Najwyraźniej potrzebujesz co najmniej dwóch wiązań lub widok nie będzie wyświetlany. – JasonD
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