web-dev-qa-db-ja.com

iOSプレイグラウンドにUIプレビューが表示されない

XCode 7.1で簡単なプレイグラウンドを作成し、次の簡単なコードを入力しました。

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) 

プレイグラウンドを実行すると、UIKitオブジェクトのプレビューは表示されず、デバッグ情報のみが表示されます。

playground

私は何を間違えていますか?

56
Lubbo

プレビューパネルを開きます:View> Assistant Editor> Show Assistant Editor

次に、コードで:

import PlaygroundSupport
PlaygroundPage.current.liveView = view

ビューにフレームを表示することを忘れないでください。


PS:Xcode 9の後、デフォルトビューでプレイグラウンドを作成できます

playground

154
duan

受け入れられた答えは、インラインコードではなくスクリーンショットであり、このXcode 8より前の方法を示しているため、良い答えではないと思います。

Xcode 8の更新された回答は次のとおりです。

いくつかの手順があります。

PlaygroundSupportをインポートする必要があります

import PlaygroundSupport

PlaygroundPage.current.needsIndefiniteExecutionをtrueに設定する必要があります。

PlaygroundPage.current.needsIndefiniteExecution = true

表示するビュー階層をliveViewに追加する必要があります。

PlaygroundPage.current.liveView = container

遊び場全体は次のようになります。

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

最後に、作成したばかりのライブビューを表示する必要があります。 Xcode 8(リリースバージョン)のコピーで、[表示]メニュー> [アシスタントエディター]> [アシスタントエディターの表示]を選択しようとすると、Xcodeが毎回クラッシュします。

画面の右側、コードの右側のボックス、コンテナビューを作成する行にマウスを移動する必要があります。小さな目のアイコンが表示され、それをクリックすると、クラッシュすることなくライブビューが表示されます。

31
Duncan C

アシスタントエディターが何もしないという問題(私にとっては単に空白であった)を経験している方のために、ここで問題を解決しました。

  1. そのコードを使用してテストします。 https://stackoverflow.com/a/33543820/4572536 (上記から受け入れられた回答)

  2. View -> Assistent Editor -> Assistent Editors on Bottom(またはその他のオプション)

後者は、ビューを再描画するXcodeをトリガーします。

注:これは可能な回避策としてこれを共有しています。なぜなら、私にとっては、Xcodeは完全なシステムの再起動後でもビューを描画しなかったからです。私はその問題を再現する方法がわかりませんが、偶然それにぶつかった場合は、この回避策を試すことができます。

13
DevAndArtist

構文に加えて、私は私のケースでライブビューを表示に戻すための別のトリックを見つけました(Xcode 8.2.1 Swift 3.0)。また、これはXcodeの小さなバグかもしれません。アシスタントエディターの上部にある[+]ボタンをクリックするだけです。アシスタントエディターがファイルのインターフェイスファイルを表示し、ライブページの自動表示を拒否することがあるためです。

enter image description here

8
code4latte

[プレイグラウンド設定]の[タイムラインを表示]をオンにするだけです。

3
Fiko

前の答えに必要なコンテナビューが必要な理由がわかりません。これも同様に機能します。

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

単一のビューのXcodeプレイグラウンドを作成して初めて実行した後、ライブビューを有効にするために右上隅のアシスタントエディターをアクティブにすることを忘れないでください。 enter image description here

1
Viktor Malyi

Xcode 8.3では、まだ問題があります。唯一機能するのは、Xcodeをシャットダウンして再起動することです。シミュレーターを実行していることに気付いたので、シミュレーターを終了しようとしましたが、問題は解決しませんでした。レーダーを提出します。

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