2015-08-26 34 views
9

Sto usando Xcode 7 beta & Swift 2UIView non ha un membro denominato '' setTranslatesAutoresizingMaskIntoConstraints

Sto cercando di aggiungere un ViewController (childVC) ad un contenitore attraverso un'azione addController. Voglio impostare il layout automatico per ViewController rispetto al contenitore. Nel seguente codice viene visualizzato il seguente errore

UIView non ha un membro denominato "setTranslatesAutoresizingMaskIntoConstraints". Ho anche provato a mettere "false" nella parentesi (vedi la riga commentata in basso) - ma anche quella non funziona

In sostanza voglio che il childVC occupi l'intero contenitore. ChildVC ha una tabella che dovrebbe ridimensionare a seconda delle dimensioni del contenitore.

func addController(controller: UIViewController) 
{ 
    addChildViewController(controller) 
    containerView.addSubview(controller.view) 


    controller.view.setTranslatesAutoresizingMaskIntoConstraints = false 

    // controller.view.setTranslatesAutoresizingMaskIntoConstraints(false) 
    var constraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|[view]|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["view" : controller.view]) 
    constraints += NSLayoutConstraint.constraintsWithVisualFormat("V:|[view]|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["view" : controller.view]) 
    NSLayoutConstraint.activateConstraints(constraints) 
    didMoveToParentViewController(controller) 
    currentController = controller 

} 
+0

È una funzione e non una proprietà, quindi è necessario chiamarla come una funzione.Cosa succede se commentate la prima riga e decommentate la linea di chiamata della funzione che avete commentato? Qual è l'errore? –

+0

La risposta accettata non è corretta. – tgebarowski

risposta

12

In Swift 2, il metodo setTranslatesAutoresizingMaskIntoConstraints divenne proprietà - translatesAutoresizingMaskIntoConstraints.

Questo non ha nulla a che fare con le versioni API e i controlli di disponibilità (che sono anche nuovi in ​​Swift 2) non sono necessari.

Se si utilizza Swift 2, è sufficiente impostare il valore della proprietà nella base di codice. Se si esegue l'aggiornamento da Swift 1, è possibile che vengano visualizzati errori in cui è necessario aggiornare la chiamata della funzione precedente.

Semplice.

18

Prima di iOS 9, setTranslatesAutoresizingMaskIntoConstraints era una funzione:

func setTranslatesAutoresizingMaskIntoConstraints(_ flag: Bool) 

In iOS 9 divenne proprietà:

var translatesAutoresizingMaskIntoConstraints: Bool 

Dovrete decidere se siete solo di mira iOS 9, impostare di conseguenza il target di implementazione e utilizzare la proprietà. Se si supportano le versioni precedenti di iOS è possibile utilizzare la nuova funzionalità di disponibilità di Swift 2.

if #available(iOS 9, *) { 
    controller.view.translatesAutoresizingMaskIntoConstraints = false 
} else { 
    controller.view.setTranslatesAutoresizingMaskIntoConstraints(false) 
} 
+0

la prima linea funziona se seleziono specificamente la destinazione di implementazione come 9 ... ma la seconda riga (altrimenti la dichiarazione - se seleziono una versione inferiore di iOS come destinazione di distribuzione) genera ancora lo stesso errore che UIView non ha un membro ...qualche idea? –

+0

Qual è il tuo SDK di base impostato su? Assicurati che sia attivo anche su iOS 9. –

+0

Come descritto di seguito, questa risposta non è corretta. –

5

Penso che la risposta accettata non è corretta. Almeno non si compila su Xcode 7. Come menzionato in uno dei commenti sotto la risposta.

E 'appena sufficiente per utilizzare la sintassi di proprietà, funziona sia su iOS 8 e iOS 9:

controller.view.translatesAutoresizingMaskIntoConstraints = false 

Penso che questo è perché UIView è ancora di classe Objective-C e la proprietà impostando su tale codice comunque invoca setTranslatesAutoresizingMaskIntoConstraints su versioni precedenti di iOS.

Inoltre, la documentazione di Apple definisce questo come una proprietà:

var translatesAutoresizingMaskIntoConstraints: Bool 

Questa sintassi è disponibile in quanto iOS 6, quindi penso che l'utilizzo di #available non è anche consigliato qui.

Per riferimento si prega di vedere: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instp/UIView/translatesAutoresizingMaskIntoConstraints

Problemi correlati