2012-10-09 26 views
16

Ho creato un UIView utilizzando il seguente codice all'interno viewDidLoad (dove 'secondview', ovviamente, è il nome del UIView):Come aggiungere i vincoli a livello di codice a un UIView creato a livello di codice?

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

Poi entro viewDidAppear ho aggiunto i vincoli a questo punto di vista:

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

Tuttavia, i vincoli non sono applicati alla vista (almeno non che io possa vedere). Invece, la vista sembra semplicemente scomparire dallo schermo. Tuttavia, se il codice del vincolo è commentato, la vista viene caricata di nuovo con il frame appropriato (ovviamente senza applicare i vincoli). Quando si applicano gli stessi vincoli a un pulsante o ImageView, i vincoli vengono applicati perfettamente. Ciò mi ha portato a pensare che il problema sia dovuto a "initWithFrame" durante la creazione della vista, dal momento che né il pulsante né ImageView richiedono effettivamente la sua dimensione.

Quali sono i tuoi pensieri? Cosa dovrei fare in modo diverso?

risposta

12

Per chi incontra questo ... Ho bisogno di aggiungere più di un vincolo. Questo ha fatto il trucco.

+1

Sì, questo mi ha aiutato pure. A quanto pare hai bisogno di almeno due vincoli o la vista non verrà visualizzata. – JasonD

+1

Hai bisogno di tutto il necessario per rimuovere l'ambiguità. Questo può essere solo due, ma a volte di più. (Etichette, ad esempio richiedono un minimo di due, possono dedurre la dimensione dal testo, ma è necessario dargli una X e Y) – LightningStryk

Problemi correlati