J'ai créé un terrain de jeu simple avec XCode 7.1 et j'ai tapé ce code simple:
import UIKit
import XCPlayground
var str = "Hello, playground"
let color = UIColor (red: 1 , green: 1 , blue: 0 , alpha: 0 )
let view = UIView()
view.backgroundColor = UIColo (colorLiteralRed: 1 , green: 0 , blue: 0 , alpha: 0 )
view.frame = CGRect (x: 0 ,y: 0 ,width: 100 ,height: 100 )
let label = UILabel (frame: CGRect (x: 5 , y: 5 , width: 50 , height: 20 ))
label.text = str
view.addSubview(label)
Lorsque le terrain de jeu fonctionne, il n'affiche pas l'aperçu de l'objet UIKit, mais seulement des informations de débogage:
Qu'est-ce que je fais mal?
Ouvrez le panneau de prévisualisation: Affichage> Editeur assistant> Afficher l’éditeur assistant
Puis dans votre code:
import PlaygroundSupport
PlaygroundPage.current.liveView = view
N'oubliez pas de donner à votre vue un cadre visible.
Ps: après Xcode 9, vous pouvez créer un terrain de jeu avec vue par défaut
La réponse acceptée est une capture d’écran, pas un code en ligne, et montre comment faire cela avant Xcode 8, donc je ne pense pas que ce soit une bonne réponse.
Il y a plusieurs étapes:
Vous devez importer PlaygroundSupport
import PlaygroundSupport
Vous devez définir PlaygroundPage.current.needsIndefiniteExecution sur true:
PlaygroundPage.current.needsIndefiniteExecution = true
Vous devez ajouter la hiérarchie de vues que vous souhaitez afficher à liveView:
PlaygroundPage.current.liveView = container
Le terrain de jeu entier pourrait ressembler à ceci:
import UIKit
import PlaygroundSupport
let container = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
let view = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
view.backgroundColor = UIColor.red
container.addSubview(view)
PlaygroundPage.current.liveView = container
PlaygroundPage.current.needsIndefiniteExecution = true
Enfin, vous devez voir la vue en direct que vous venez de créer. Sur ma copie de Xcode 8 (version finale) Si j'essaie de sélectionner le menu Affichage> éditeur adjoint> Afficher l'assistant d'édition, Xcode se bloque à chaque fois.
Je dois passer la souris sur le côté droit de l'écran dans la zone située à droite du code, sur la ligne où je crée la vue conteneur. Je vois une petite icône en forme d’œil, et si je clique dessus, la vue en direct s’affiche sans s’écraser.
Pour ceux d'entre vous qui rencontrent le problème que l'éditeur adjoint ne fait rien (pour moi, c'était tout simplement vide), voici comment j'ai résolu le problème.
Utilisez ce code pour tester: https://stackoverflow.com/a/33543820/4572536 (réponse acceptée de ci-dessus)
View -> Assistent Editor -> Assistent Editors on Bottom
(ou toute autre option)
Ce dernier déclenchera Xcode pour redessiner la vue.
Remarque: je partage cette solution comme solution de contournement possible car, pour moi, mon Xcode n'a pas dessiné la vue même après le redémarrage complet du système. Je ne sais pas comment reproduire ce problème, mais si vous y tombez, vous pouvez essayer cette solution de contournement.
Outre la syntaxe, j'ai trouvé une autre astuce pour ramener la vue en direct à mon cas (Xcode 8.2.1 Swift 3.0). Cela pourrait également être un bogue mineur dans Xcode. Cliquez simplement sur le bouton + en haut de l’éditeur assistant, car votre éditeur adjoint affiche parfois le fichier d’interface de votre fichier et refuse d’afficher automatiquement la page en direct.
Il suffit de cocher Afficher la chronologie sous Paramètres du terrain de jeu.
Je ne vois pas pourquoi vous avez besoin de la vue conteneur requise par la réponse précédente. Cela fonctionne aussi bien:
import UIKit
import XCPlayground
import PlaygroundSupport
var str = "Hello, playground"
let color = UIColor (red: 1 , green: 1 , blue: 0 , alpha: 0 )
let view = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
view.backgroundColor = UIColor.red
view.frame = CGRect (x: 0 ,y: 0 ,width: 200 ,height: 200 )
PlaygroundPage.current.needsIndefiniteExecution = true
PlaygroundPage.current.liveView = view
let label = UILabel (frame: CGRect (x: 5 , y: 5 , width: 200 , height: 20 ))
label.text = str
view.addSubview(label)
Dans Xcode 8.3, j'ai toujours des problèmes. La seule chose qui fonctionne est d’arrêter Xcode et de le relancer. J'ai essayé de quitter le simulateur car je constate qu'il fonctionne, mais cela n'a pas résolu le problème. Déposera un radar.
import UIKit
import PlaygroundSupport
let frame = CGRect(x: 0, y: 0, width: 300, height: 700)
let container = UIView(frame: frame)
container.backgroundColor = .red
let inner = UIView(frame: CGRect(x: 100, y: 100, width: 20, height: 40))
inner.backgroundColor = .blue
container.addSubview(inner)
PlaygroundPage.current.liveView = container
PlaygroundPage.current.needsIndefiniteExecution = true