web-dev-qa-db-fra.com

iOS Playground n'affiche pas l'aperçu de l'interface utilisateur

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:

playground

Qu'est-ce que je fais mal?

56
Lubbo

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

playground

154
duan

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.

Voici une réponse mise à jour Pour Xcode 8:

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.

31
Duncan C

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.

  1. Utilisez ce code pour tester: https://stackoverflow.com/a/33543820/4572536 (réponse acceptée de ci-dessus)

  2. 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.

13
DevAndArtist

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.

enter image description here

8
code4latte

Il suffit de cocher Afficher la chronologie sous Paramètres du terrain de jeu.

3
Fiko

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)
2
jglasse

Une fois que vous avez créé et joué Xcode pour une vue unique, n'oubliez pas d'activer Assistant Editor dans le coin supérieur droit pour activer Live View. enter image description here

1
Viktor Malyi

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
1
smileBot