【问题标题】:iOS Playground doesn't show UI previewiOS Playground 不显示 UI 预览
【发布时间】:2016-02-06 05:20:54
【问题描述】:

我使用 XCode 7.1 创建了一个简单的 Playground,并且输入了以下简单代码:

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) 

playground 运行时,不显示 UIKit 对象预览,只显示调试信息:

我做错了什么?

【问题讨论】:

    标签: ios swift xcode uikit swift-playground


    【解决方案1】:

    打开预览面板:View > Assistant Editor > Show Assistant Editor

    然后在你的代码中:

    import PlaygroundSupport
    PlaygroundPage.current.liveView = view
    

    别忘了给你的视图一个可见的框架。


    Ps:在 Xcode 9 之后,你可以创建一个默认视图的 Playground

    【讨论】:

    • XCode7 改变 UIKit 渲染行为引入 XCPlayground?看到这个:stackoverflow.com/questions/24009598/…
    • in the following Q&A 所示,对于Xcode 8,上述内容需要稍作修改(import PlaygroundSupportPlaygroundPage.current.liveView = view)。
    • 很棒的例子可以在这里找到:github.com/uraimo/Awesome-Swift-Playgrounds
    • PlaygroundPage.current.liveView = view 使一个黑色方块出现在助手编辑器窗格中。但是,里面没有出现“你好游乐场”.. :-/
    • 太糟糕了,没有明显的文档。搜索各种“iPad Playground Swift”组合除了“学习编程”和预览页面外,没有任何来自 Apple 的东西。如果不在这里,我将永远无法从任何 Apple 页面访问“XCPlaygroundPage”。如果 iPad Playground 对实际开发人员有一点吸引力,那就太好了。在实际的 iPad 应用程序中真的期待它。
    【解决方案2】:

    接受的答案是屏幕截图,而不是内联代码,它显示了如何在 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 每次都会崩溃。

    我必须将鼠标悬停在屏幕右侧的代码右侧框中,在我创建容器视图的行上。我看到一个小眼睛图标,如果我点击它,它会显示实时视图而不会崩溃。

    【讨论】:

    • Duncan C 除了小预览之外,您还展示了与 UIView 相关的任何内容吗?我有同样的问题,XCode 8.2 没有崩溃,但它在助手编辑器窗格和下面的结果中都没有显示任何内容,只有眼睛图标和小矩形按钮(显示内联)工作。
    • 顺便说一句,我发现,在很多情况下,我不得不退出并重新启动 Xcode 以获取 liveView“模拟器”,即使代码构建良好,并且通过单击装订线中的眼球或方形图标发现的小预览显示了我的预期。
    • needsIndefiniteExecution 属性默认为真
    • 交互(例如点击按钮)需要明确设置needsIndefiniteExecution = true
    • @code4latte,needsIndefiniteExecution 默认情况下不为真。请参阅 Desmond 的评论。
    【解决方案3】:

    我不明白为什么您需要上一个答案所需的容器视图。这同样有效:

    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)
    

    【讨论】:

    • macOS swift 3.0 的交互示例:gist.github.com/erica/53c77b931a6ed560da5a
    • 容器不是必需的,但它“为您提供了放置视图的地方”
    • 您在代码中使用的view 与使用的container 其他答案没有什么不同。
    【解决方案4】:

    对于那些遇到助理编辑不做任何事情的人(对我来说它只是空白),这是我解决问题的方法。

    1. 使用该代码进行测试:https://stackoverflow.com/a/33543820/4572536(已接受上述答案)

    2. View -> Assistent Editor -> Assistent Editors on Bottom(或任何其他选项)

    后者会触发 Xcode 重绘视图。

    注意:我分享这个作为一种可能的解决方法,因为对我来说,即使在完全系统重新启动后,我的 Xcode 也没有绘制视图。我不知道如何重现该问题,但如果您碰巧遇到它,您可以尝试此解决方法。

    【讨论】:

      【解决方案5】:

      只需选中 Playground Settings 下的 Show Timeline。

      【讨论】:

      • 此设置似乎不再可用?
      【解决方案6】:

      在 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
      

      【讨论】:

        【解决方案7】:

        除了语法之外,我还发现了另一个技巧,可以在我的案例中重新显示实时视图(Xcode 8.2.1 Swift 3.0)。这也可能是 Xcode 中的一个小错误。 只需单击助手编辑器顶部的 + 按钮。因为有时候你的助理编辑会显示你文件的界面文件,拒绝自动显示实时页面。

        【讨论】:

          【解决方案8】:

          为单个视图创建 Xcode Playground 并首次运行后,不要忘记激活右上角的 Assistant Editor 以启用 Live View。

          【讨论】:

            【解决方案9】:

            您可以转到编辑器 > 选择实时视图。在 XCode 11.5 中检查过

            无需将 needsIndefiniteExecution 设置为 true,带有实时视图的 Playground 页面会自动将其设置为 true

            【讨论】:

              猜你喜欢
              • 2017-08-30
              • 2019-11-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-12-08
              • 2016-07-26
              • 2019-05-15
              • 1970-01-01
              相关资源
              最近更新 更多