相关疑难解决方法(0)

在 SwiftUI 中使用获取视图的宽度

我需要在 中获取渲染视图的宽度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)

frame swift swiftui

27
推荐指数
2
解决办法
3万
查看次数

SwiftUI中的Geometry Reader是什么?

我正在学习SwiftUI。我遇到了“ GeometryReader”。我想知道为什么以及何时使用它?

swift swiftui

19
推荐指数
1
解决办法
6163
查看次数

SwiftUI - 如何获得点击按钮的坐标/位置

简短版本:如何获取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)

swift swiftui

6
推荐指数
2
解决办法
5053
查看次数

在SwiftUI中拥抱子视图

戴夫·亚伯拉罕(Dave Abrahams)在WWDC19中关于“自定义视图”的演讲中解释了SwiftUI布局的一些机制,但是他遗漏了一些内容,因此我难以正确调整视图的大小。

View是否有一种方法可以告诉其容器它没有提出任何空间需求,但是会使用给定的所有空间?另一种说法是容器应拥抱其子视图。

具体的例子,我想要类似c的东西:

VStack中的一些文本

如果a)中TextVStacklike中包含一些,则VStack将会采用其宽度作为最宽的子视图。

如果您Rectangle在b)中添加了一个ough,它将尽可能扩展,直到VStack填充容器。

这表明Texts和Rectangles在布局Text方面属于不同的类别,具有固定的大小并且a Rectangle贪婪。但是,如果我要自己制作容器,该如何将其传达给容器View

我实际上想要达到的结果是c)。VStack在确定其大小时应忽略Rectangle(或我的自定义视图),然后做到这一点,然后应告知Rectangle或我的自定义视图可以有多少空间。

鉴于SwiftUI似乎是自下而上地布局,也许这是不可能的,但似乎应该有some办法实现。

swift swiftui

5
推荐指数
2
解决办法
829
查看次数

标签 统计

swift ×4

swiftui ×4

frame ×1