iOS Playground no muestra la vista previa de la interfaz de usuario
swift xcode (8)
Creé un patio de juegos simple con XCode 7.1 y escribí este código 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)
Cuando se ejecuta el área de juegos, no muestra la vista previa del objeto UIKit, sino solo la información de depuración:
¿Qué estoy haciendo mal?
Además de la sintaxis, encontré otro truco para volver a mostrar la vista en vivo en mi caso (Xcode 8.2.1 Swift 3.0). También esto podría ser un error menor en Xcode. Simplemente haga clic en el botón + en la parte superior del editor asistente. Porque en algún momento su editor asistente muestra el archivo de interfaz de su archivo y se niega a mostrar automáticamente la página en vivo.
En Xcode 8.3 sigo teniendo problemas. Lo único que funciona es cerrar Xcode y reiniciarlo. Intenté salir del simulador porque noté que está ejecutando el simulador, pero esto no solucionó el problema. Archivará 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
La respuesta aceptada es una captura de pantalla, no un código en línea, y muestra cómo hacer este pre Xcode 8, así que no creo que sea una buena respuesta.
Aquí hay una respuesta actualizada para Xcode 8:
Hay varios pasos:
Necesitas importar PlaygroundSupport
import PlaygroundSupport
Debe establecer PlaygroundPage.current.needsIndefiniteExecution en true:
PlaygroundPage.current.needsIndefiniteExecution = true
Debe agregar la jerarquía de vistas que desea mostrar a liveView:
PlaygroundPage.current.liveView = container
Todo el patio podría verse así:
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
Finalmente, necesita ver la vista en vivo que acaba de crear. En mi copia de Xcode 8 (versión de lanzamiento) Si intento seleccionar el menú Ver> asistente de editor> Mostrar asistente de asistente, Xcode falla cada vez.
Tengo que pasar el mouse por el lado derecho de la pantalla en el cuadro a la derecha del código, en la línea donde creo la vista del contenedor. Veo un pequeño ícono de ojo, y si hago clic en eso, muestra la vista en vivo sin fallar.
No veo por qué necesita la vista de contenedor que requiere la respuesta anterior. Esto funciona igual de 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)
Para aquellos de ustedes que experimentan el problema de que el editor asistente no hace nada (para mí simplemente estaba en blanco), así es como resolví el problema.
-
Use ese código para probar: https://.com/a/33543820/4572536 (respuesta aceptada de arriba)
-
View -> Assistent Editor -> Assistent Editors on Bottom
(o cualquier otra opción)
Este último activará Xcode para volver a dibujar la vista.
Nota: estoy compartiendo esto como una posible solución, porque para mí mi Xcode no dibujó la vista incluso después de reiniciar el sistema completo. No tengo idea de cómo reproducir ese problema, pero si te topas con él, puedes probar esta solución.
Simplemente marque Mostrar línea de tiempo en Configuración del área de juegos