问题标签 [geometryreader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
360 浏览

swiftui - 多个 GeometryReader 导致其他 GeometryReader SwiftUI 出现问题

我正在使用两个 Stack 并且我有一个 UIViewRepresentable ,我想将它放在第一个堆栈中,但是对于宽度和高度,我使用 GeometryReader 来获取宽度和高度,以便 UIViewRepresentable 将在第一个堆栈中。同样在第二个堆栈中,我有一个 Rectangle,我还想将 Rectangle 的宽度大小设置为与第二个堆栈相同,因此我再次使用了 GeometryReader,现在这个影响了第一个堆栈中 UIViewRepresentable 的帧大小。

我正在使用iOS 13.4Xcode 11.4

第一个视图和第一个堆栈:

第二视图和第二堆栈:

然后我在另一个视图中使用这两个视图:

您还可以在下图中看到: 没有将Caverage() 放在 ContentView 中: 没有将 Caverage() 放在 ContentView 中

Caverage() 放入 ContentView 后: 将 Caverage() 放入 ContentView 后

0 投票
1 回答
648 浏览

ios - SwiftUI GeometryReader 使其内容加载两次

你好吗?

请考虑以下代码:

我的问题很简单:为什么 ViewOne 在 GeometryReader 内构建了两次,而在 GeometryReader 之外只构建了一次?

首先,我认为需要创建一次视图,然后再考虑 GeometryReader 的大小,但是,如果您在 ViewOne 中有更复杂的内容,事情就会变得一团糟。

有任何想法吗??

感谢您花时间和帮助这个 SwiftUI 朋友!

0 投票
0 回答
208 浏览

image - 如何在 SwiftUI 中动态偏移裁剪的图像?

我喜欢用 SwiftUI 实现的是图像中的某个部分(内容管理系统提供的 ax,y 点)始终可见,即使在需要调整图像大小和裁剪以适应布局的情况下也是如此。

我想要实现的视觉示例

以下示例代码生成的输出可以在示例的第一个屏幕截图中看到:

如果图像的框架是恒定的,我可以通过添加offset(x:,y:)修饰符来解决这个问题。但是,帧的大小不同(例如,在我的示例中,宽度取决于设备),因此需要动态计算偏移量。为此,我需要知道图像框架的大小和UIImage.

我尝试了成功,GeometryReaderÀnchorPreferences没有成功。知道如何在 SwiftUI 中解决这个问题吗?

0 投票
1 回答
452 浏览

swiftui - 为什么 VStack 不能在带有滚动视图的 GeometryReader 中工作?

我的 vStack 滚动视图在没有 GeometryReader 的情况下工作(在 AppleTV 中 - 我没有在 iOS 中测试)。

然后我添加了geometryreader 和VStack 像ZStack 一样“折叠”。

我能做些什么来解决这个问题?(是的,我需要几何阅读器;))

结果:

在此处输入图像描述

并且此代码按需要工作:

结果: 在此处输入图像描述

0 投票
3 回答
965 浏览

swiftui - 在 geometryReader 中设置 @State var

如何在geometryReader 中设置@State var

这是我的代码

我尝试使用一个功能但不起作用

任何想法?谢谢!

0 投票
1 回答
466 浏览

swiftui - 如何让我的 UIView 在 SwiftUI 中正确调整其内容的大小?

我想使用Yonat Sharon在我的 SwiftUI 视图中编写的很棒的 MultiSegmentPicker。

https://github.com/yonat/MultiSelectSegmentedControl

但是,我并不完全理解 UIViewRepresentable 视图和我的 SwiftUI 视图之间的交互。如何让主机视图控制器将其高度缩小到分段控件的大小?

这是演示页面的调试器视图 - 请注意顶部栏周围的蓝色区域: 在此处输入图像描述

演示代码并没有深入了解这个问题,它只是对 UIViewRepresentable 视图的调用。我在这里将其简化为一个示例:

在此处输入图像描述

请注意,我在控件之前有一个带 Spacer() 的 VStack。

此示例所需的行为是带有“First”、“Second”等的条紧贴屏幕底部。相反,主机控制器保留了所有空间......

我是否需要使用几何阅读器来解决这个问题并缩小高度。还是我必须在 UIViewRepresentable 视图中调整一些东西?

任何关于桥接 UIKit 和 SwiftUI 的见解都会受到赞赏......这是一个简单的解决方案吗?

这些并没有解决我的问题: UIViewRepresentable content not updates

如何让 SwiftUI UIViewRepresentable 视图拥抱它的内容?

如何根据内容调整 UITextView 的大小?

0 投票
2 回答
639 浏览

swiftui - SwiftUI GeometryReader 体积小巧

我希望我LoadingTitle的屏幕宽度为 70%,所以我使用它,GeometryReader但它会使垂直尺寸扩大,并且我LoadingTitle需要更多的垂直空间。我希望它尽可能保持紧凑。

使用硬编码时,width: 300我得到了正确的布局(相对宽度除外):

在此处输入图像描述

body现在,如果我将my包裹在LoadingTitle其中,GeometryReader我可以获得正确的相对大小,但随后GeometryReader会垂直扩展我的视图:

在此处输入图像描述

我尝试按照其他建议.fixedSize(horizontal: false, vertical: true)使用,但结果视图过于紧凑,并且其所有填充都被忽略:GeometryReader

在此处输入图像描述

如何以相对宽度实现第一个屏幕截图的布局?

0 投票
1 回答
925 浏览

swiftui - 如何在 SwiftUI 中获取不同视图的帧(大小和坐标)?

我需要在 VStack 中获取多个视图的框架。我认为使用,GeometryReader但它只为父级返回必要的参数。如何在下面的屏幕截图中获取每个视图的这些参数?

我需要获取框架的布局

0 投票
1 回答
777 浏览

swift - 当从 GeometryReader 中进行更改时,SwiftUI 不会反映对 @Binding @State 变量的更改

我有一个带有 HStack 视图的 ScrollView,这些视图会根据它们自己的位置进行动画处理。为此,我使用了一个 GeometryReader,它将读取每个视图的当前全局位置,当到达某个位置时,视图将从失焦状态切换到聚焦状态,并进行一些转换并将 @State 变量更改为指示视图处于焦点位置,以便视图的其他部分可以对其进行操作。

相当简单,对吧?不幸的是,当我从 GeometryReader 中更改 @State 时,状态更改不会发生。因此,我构建了一个简化版本来演示该问题。

这是代码:

当您点击同样在 GeometryReader 中运行的“切换”按钮时,@State 变量将成功更改并反映更改。

当您实际滚动 ScrollView 并让它自然滚动时,什么都不会发生。即使停止后也不会更新。

见这里:https ://streamable.com/d3op74

当您在 ScrollView 中缓慢滚动而不抬起手指时,@State 变量会发生变化。

在这里:https ://streamable.com/7m15t9

如果您像这样使用 DispatchQueue.main.asyncAfter() 引入延迟:

即使延迟为 0,@State 更改也会在您滚动时起作用,无论多快,但是这次切换按钮不起作用(这是有道理的,因为 GeometryReader 会重新计算并推翻由按钮)。

在这里:https ://streamable.com/q3ylu1

有人可以解释一下这里发生了什么吗?这是预期的行为还是错误?

0 投票
2 回答
1509 浏览

ios - SwiftUI 使用 GeometryReader 时覆盖层的错误垂直对齐

我有一个覆盖视图,我希望它出现在其父视图的顶部边缘(垂直对齐到顶部而不是中心,请参见快照 B),并且能够在点击时半隐藏它(将其向上移动以使其不t 遮蔽其父视图,但仍有一部分可见,例如 64 像素,以便仍可以将其轻敲回原始位置,请参见快照 C)。问题是当我使用GeometryReader来获取我试图移动的覆盖视图的高度时,覆盖最初出现在视图的中心(参见快照 A)。如果我不使用几何阅读器,我不知道要偏移多少覆盖视图:

不知道为什么几何阅读器会对布局产生这种影响。

(A) 这是几何阅读器代码的显示方式:

在此处输入图像描述

(B)如果我删除几何阅读器代码,我会得到想要的效果:

在此处输入图像描述

(C) 这就是我想要将叠加层移到顶部的方式:

在此处输入图像描述

编辑:上面显示的代码生成布局 (A)。如果我省略几何阅读器代码,我想要布局(B)。