我有一个BugSplitView
单独工作正常但会导致
先决条件失败:属性未能设置初始值
在预览或模拟器中导航到时出错。
该视图具有由水平按钮栏分隔的上部 (Color) 和下部 (Color),并使用 GeometeryReader 和split
状态进行布局。当它是 NavigationButton 的目的地时,它不会在预览中正确显示并在模拟器中运行时报告上面的断言。删除它BugButtonBar
,它的工作原理。把我难住了!帮助。
import SwiftUI
struct BugSplitView: View {
@State var split : CGFloat = 0.75
var buttons : [BugButtonBar.Info]{
[BugButtonBar.Info(title: "title", imageName: "text.insert"){}]
}
var body: some View {
GeometryReader{ g in
VStack(spacing: 0){
Color.gray
.frame(width: g.size.width, height: (g.size.height) * self.split)
VStack{
BugButtonBar(infos: self.buttons)
Color(white: 0.3)
}
.frame(height: (g.size.height) * (1 - self.split))
}
}.edgesIgnoringSafeArea(.all)
}
}
struct BugButtonBar : View{
struct Info : Identifiable …
Run Code Online (Sandbox Code Playgroud) 我试图用SwiftUI创建一个简单的多选列表。我无法使其工作。
列表有第二个参数,它是SelectionManager,所以我尝试创建一个具体的实现。但是,它永远不会被调用,行也不会突出显示。
import SwiftUI
var demoData = ["Phil Swanson", "Karen Gibbons", "Grant Kilman", "Wanda Green"]
struct SelectKeeper : SelectionManager{
var selections = Set<UUID>()
mutating func select(_ value: UUID) {
selections.insert(value)
}
mutating func deselect(_ value: UUID) {
selections.remove(value)
}
func isSelected(_ value: UUID) -> Bool {
return selections.contains(value)
}
typealias SelectionValue = UUID
}
struct SelectionDemo : View {
@State var selectKeeper = SelectKeeper()
var body: some View {
NavigationView {
List(demoData.identified(by: \.self)){ name in
Text(name)
}
.navigationBarTitle(Text("Selection Demo"))
} …
Run Code Online (Sandbox Code Playgroud) 下面是最简单的例子。在预览中工作正常(UITextView
文本更新为“哎哟”)。但是,在一个应用程序中运行它(即添加为rootView
通过sceneDelegate
),以及UITextView
不更新。
import SwiftUI
class ModelObject : ObservableObject{
@Published var text = "Model Text"
}
struct MyTextView : UIViewRepresentable {
@ObservedObject var modelObject : ModelObject
func makeUIView(context: Context) -> UITextView {
let result = UITextView()
result.isEditable = true
return result
}
func updateUIView(_ view: UITextView, context: Context) {
view.text = modelObject.text
}
}
struct BugDemoView : View{
@ObservedObject var modelObject : ModelObject
var body : some View{
VStack{
MyTextView(modelObject: modelObject)
Button(action: {
self.modelObject.text …
Run Code Online (Sandbox Code Playgroud) 给定 markdown 字符串 "**Line 1**\n\nLine 2" 我期望输出为
1号线
2号线
相反我得到
1号线2号线
当然,这不是 markdown 或 AttributedString 的限制。我错过了什么?!如果没有两个空行,如何指定多个段落?
struct DemoView_Previews: PreviewProvider {
static var previews: some View {
Text(try! AttributedString(markdown: "**Line 1**\n\nLine 2"))
}
}
Run Code Online (Sandbox Code Playgroud)