问题描述
以上代码在 Mac 上运行,使用 Xcode 编辑器。但是,在使用 Swift Playground 编辑器的 iPad 上,相同的代码返回:abort() called
。如何在 iPad 上渲染 Text()?
我按照此视频中的说明进行操作:
https://developer.apple.com/videos/play/wwdc2020/10643/
我在 Apple 的开发者论坛上发现了一个类似的问题,但没有真正的解决方案:
https://developer.apple.com/forums/thread/667357
我尝试减小尺寸,但没有帮助:
“我会根据 Abort() 的另一个问题假设,如果 Abort() 即将崩溃,则会调用它,并且视图似乎没有在实时视图中获得屏幕的边界,所以它不知道如何/在哪里渲染视图。”
import SwiftUI
import PlaygroundSupport
struct ProgressView: View {
var body: some View {
ZStack {
Circle()
.stroke(linewidth: 40)
.foregroundColor(.blue)
Text("25%")
}
}
}
PlaygroundPage.current.setLiveView(ProgressView().padding(150))
解决方法
这很可能是一个错误 - 我提交了反馈 #FB9092837。但是在 Apple 修复它之前,添加硬编码的 .frame
可以作为一种hacky 修复。
.frame(width: 500,height: 500)
但是,加载需要一段时间......它首先在左上角渲染,几秒钟后移动到中心。
我发现如果您将 ProgressView
放在另一个容器视图中,并将框架设置在那里,速度会快得多。
代码如下:
import SwiftUI
import PlaygroundSupport
struct ProgressView: View {
var body: some View {
ZStack {
Circle()
.stroke(lineWidth: 40)
.foregroundColor(.blue)
Text("25%")
}
}
}
struct ContainerView: View {
var body: some View {
ProgressView()
.frame(width: 500,height: 500)
}
}
PlaygroundPage.current.setLiveView(ContainerView())