我需要在 中获取渲染视图的宽度SwiftUI,这显然不是那么容易。
我的看法是,我需要一个返回视图尺寸的函数,就这么简单。
var body: some View {
VStack(alignment: .leading) {
Text(timer.name)
.font(.largeTitle)
.fontWeight(.heavy)
Text(timer.time)
.font(.largeTitle)
.fontWeight(.heavy)
.opacity(0.5)
}
}
Run Code Online (Sandbox Code Playgroud) 我正在学习SwiftUI。我遇到了“ GeometryReader”。我想知道为什么以及何时使用它?
简短版本:如何获取Button在 SwiftUI 中单击的坐标?
我正在寻找这样的东西(伪代码)在geometry.x当前视图中单击按钮的位置:
GeometryReader { geometry in
return Button(action: { self.xPos = geometry.x}) {
HStack {
Text("Sausages")
}
}
}
Run Code Online (Sandbox Code Playgroud)
长版:我正在开始使用 SwiftUI 和 Swift,所以想知道如何最好地从概念上实现这一点。
举一个我正在玩的具体例子:
想象一个选项卡系统,我想将下划线指示器移动到单击按钮的位置。
[aside] 这篇文章中有一个答案在视觉上做了我想要的,但看起来相当复杂:How to make the size of another view in SwiftUI [/aside]
这是我的外部结构,它构建了我正在尝试调整大小和位置的选项卡栏和矩形(当前指标):
import SwiftUI
import UIKit
struct TabBar: View {
var tabs:ITabGroup
@State private var selected = "Popular"
@State private var indicatorX: CGFloat = 0
@State private var indicatorWidth: CGFloat = 10
@State private var …Run Code Online (Sandbox Code Playgroud) 戴夫·亚伯拉罕(Dave Abrahams)在WWDC19中关于“自定义视图”的演讲中解释了SwiftUI布局的一些机制,但是他遗漏了一些内容,因此我难以正确调整视图的大小。
View是否有一种方法可以告诉其容器它没有提出任何空间需求,但是会使用给定的所有空间?另一种说法是容器应拥抱其子视图。
具体的例子,我想要类似c的东西:
如果a)中Text的VStacklike中包含一些,则VStack将会采用其宽度作为最宽的子视图。
如果您Rectangle在b)中添加了一个ough,它将尽可能扩展,直到VStack填充其容器。
这表明Texts和Rectangles在布局Text方面属于不同的类别,具有固定的大小并且a Rectangle贪婪。但是,如果我要自己制作容器,该如何将其传达给容器View?
我实际上想要达到的结果是c)。VStack在确定其大小时应忽略Rectangle(或我的自定义视图),然后做到这一点,然后应告知Rectangle或我的自定义视图可以有多少空间。
鉴于SwiftUI似乎是自下而上地布局,也许这是不可能的,但似乎应该有some办法实现。