我正在学习SwiftUI。我遇到了“ GeometryReader”。我想知道为什么以及何时使用它?
自从发布答案以来,我还写了一篇有关GeometryReader如何工作的文章。
查看它以获取更详细的说明:https :
//swiftui-lab.com/geometryreader-to-the-rescue/
GeometryReader是一个视图,使您可以访问父级的大小和位置。例如:
struct MyView: View {
var body: some View {
GeometryReader { geometry in
// Here goes your view content,
// and you can use the geometry variable
// which contains geometry.size of the parent
// You also have function to get the bounds
// of the parent: geometry.frame(in: .global)
}
}
}
我通常将其与.background()结合使用以获得其他视图的范围。例如,“文本”视图很难预先预测它的大小。当我需要这些信息时,可以使用以下技巧:
首先,我定义了一个名为GeometryGetter的视图:
struct GeometryGetter: View {
@Binding var rect: CGRect
var body: some View {
return GeometryReader { geometry in
self.makeView(geometry: geometry)
}
}
func makeView(geometry: GeometryProxy) -> some View {
DispatchQueue.main.async {
self.rect = geometry.frame(in: .global)
}
return Rectangle().fill(Color.clear)
}
}
然后,获取Text视图(或任何其他视图)的边界:
struct MyView: View {
@State private var rect: CGRect = CGRect()
var body: some View {
Text("some text").background(GeometryGetter($rect))
// You can then use rect in other places of your view:
Rectangle().frame(width: 100, height: rect.height)
}
}
注意
在GeometryGetter中,我添加了DispatchQueue.main.async {}来设置矩形。在某些情况下,否则可能会导致运行时警告:
在视图更新期间修改状态 。
SwiftUI教程使用关键字指示可变UI状态: 它提供了以下总结: 状态是一个值或一组值,可以随时间变化,并影响视图的行为、内容或布局。使用具有@State属性的属性将状态添加到视图。 这个关键词到底是什么意思? 如何改变一个变量导致视图被重新计算? 其他变量如何在getter中不可变?
苹果新的框架似乎使用了一种新的语法,可以有效地构建元组,但有另一种语法: 试图解决这个语法到底是什么,我发现这里使用的初始化器需要类型
请问:SwiftUI的动态替换是什么意思? 动态替换。Swift 编译器和运行时已全面嵌入到 Xcode 中,你可以随时构建和运行你的 App。你看到的设计画布不仅看起来像是用户界面 — 它确实就是你实时运行的 App。此外,使用动态替换功能,Xcode 可以直接在实时运行的 App 中替换成编辑后的代码。
问题内容: 苹果的新框架似乎使用了一种 新型语法 ,可以有效地构建元组,但又具有另一种语法: 尝试解决这种语法的实际含义时 ,我发现这里使用的初始化程序将类型的闭包 作为第二个参数,其中的通用参数是通过闭包推断的。为了找出要推断的类型,我对代码进行了一些更改,并保持其功能: 以此,表明自己是类型,即类型。向上看,我发现它是一个源自自身的包装器类型,只能通过传递应该包装的元组来进行初始化。 题 现在
协议定义如下: 因此,现在是一个过时的协议,不能直接用作返回类型,尽管swift5.1的不透明返回类型可以处理这个问题,但是为什么要声明一个,而不是?
问题内容: 该SwiftUI教程使用关键字来表示可变UI状态: 它提供了以下摘要: 状态是一个值或一组值,可以随时间变化,并影响视图的行为,内容或布局。您可以将属性与@State属性一起使用,以将状态添加到视图中。 关键字的确切含义是什么? 变异变量如何导致视图重新计算? 其他变量在吸气剂中如何不变? 问题答案: 该关键字是,最近刚刚在雨燕5.1中引入的功能。如相应提案中所述,它有点像是值包装器,