2012-10-09 23 views
16

Ich habe innerhalb viewDidLoad eine UIView mit dem folgenden Code erstellt (wobei 'secondview' ist offenbar der Name des UIView):Wie programmgesteuert programmgesteuert zu einer programmgesteuert erstellten UIView hinzugefügt werden?

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

Dann innerhalb viewDidAppear ich zu dieser Ansicht Einschränkungen hinzugefügt:

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

Die Einschränkungen werden jedoch nicht auf die Ansicht angewendet (zumindest nicht, dass ich sehen kann). Stattdessen scheint die Ansicht einfach vom Bildschirm zu verschwinden. Wenn der Constraint-Code jedoch auskommentiert ist, wird die View erneut mit dem entsprechenden Frame geladen (natürlich ohne dass die Constraints angewendet werden). Wenn Sie dieselben Einschränkungen für einen Button oder ImageView anwenden, werden die Constraints perfekt angewendet. Das hat mich dazu gebracht zu glauben, dass das Problem wegen 'initWithFrame' beim Erstellen der Ansicht auftritt, da weder die Schaltfläche noch ImageView tatsächlich ihre Größe erfordert.

Was sind Ihre Gedanken? Was soll ich anders machen?

Antwort

12

Für jeden, der auf diese ... kommt, musste ich mehr als eine Einschränkung hinzufügen. Das hat den Trick gemacht.

+1

Ja, das hat mir auch geholfen. Anscheinend benötigen Sie mindestens zwei Einschränkungen oder die Ansicht wird nicht angezeigt. – JasonD

+1

Sie benötigen so viele wie erforderlich, um Mehrdeutigkeiten zu beseitigen. Dies kann so wenig wie zwei, aber manchmal mehr sein. (Etiketten benötigen zum Beispiel mindestens zwei, sie können die Größe aus dem Text ableiten, aber Sie müssen ein X und Y geben) – LightningStryk

Verwandte Themen