问题标签 [swiftui-scrollview]

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 回答
77 浏览

ios - SwiftUI禁用VStack中ScrollView下方项目的键盘避免

我遇到了一些关于在 SwiftUI 中禁用键盘避免的问题。我的应用程序有一个自定义选项卡栏,它位于根视图内容下方的 VStack 中。但是,我的大多数视图中都有 ScrollViews。当键盘打开时,它会将标签栏推到键盘上方,即使使用 .ignoresSafeArea(.keyboard, .bottom) 也是如此。

本质上:

在这段代码中,当键盘打开时,它会将 TabBarView 推到键盘上方,从而减小滚动视图的大小。我想这与滚动视图没有真正定义的大小有关 - 而是占用了所有可用空间。

这里有什么解决方案?

谢谢!

0 投票
0 回答
141 浏览

swiftui - 您可以在 SwiftUI 中以编程方式显式设置滚动视图的内容偏移量吗?

是否可以在 UI 的不同级别共享两个滚动视图的内容偏移量?是否可以在 SwiftUI 中控制滚动视图的内容偏移?我知道 ScrollView 现在可以滚动到某个特定项目,如果该项目有一个 id,但如果用户与其中任何一个交互,我希望两个滚动视图一起滚动。我不能在两个部分都使用一个滚动条的原因是我试图完成一个网格,其中左列和第一行都是粘性的。下面是完成这个网格的代码:

固定第一行 固定第一列 两个滚动的水平滚动视图

当视图垂直滚动并且第一列也被固定时,顶行被固定。然而,您可以看到第一行标题(在符号之后)应该水平滚动,但事实并非如此。它下面的网格项目也是如此,但它们是两个不同的滚动视图。他们是否可以通过某种绑定一起滚动?

0 投票
0 回答
167 浏览

swiftui - 摆脱 SwiftUI ScrollView 顶部填充

我似乎无法摆脱 ScrollView 顶部的 ~6 高度填充(?)。我尝试在 ScrollView 本身及其内容上将填充设置为 0。我尝试使用 SwiftUI-Introspect 来获取内容插图,但它们似乎已经为顶部的 0。我可以只使用偏移量(y:-6),但我想了解导致填充的原因。有人知道吗?

在此处输入图像描述

0 投票
0 回答
72 浏览

ios - SwiftUI 2.0 键盘避免设置滚动条偏移

我想在点击位于底部的 ScrollBar 中的 TextField 时更改 ScrollBar 偏移量(因此会触发键盘回避)。

当我选择一个 TextField 时,滚动条会调整。但是 TextField 的底部(灰色背景)被切断了。有没有办法调整它以使整个 TextField 可见?

在此处输入图像描述

谢谢回答!

0 投票
0 回答
111 浏览

swiftui - SwiftUI 使用 NavigationView 中的 tabview 自动折叠导航栏

我的代码具有类似于此处所示的结构。

TabView 在 NavigationView 内。两个 tabItems 都有滚动视图。在 statsView 上,导航栏会自动关闭,但在 secondStatsView 上不会(参见 gif)。我想使用这个代码构造,因为用户可以在应用程序的第一页上选择一些东西,选择后它将打开 tabview。用户可以从任何选项卡返回到 firstView。有没有办法克服这个问题?

在此处输入图像描述

0 投票
2 回答
502 浏览

swiftui - ScrollViewReader scrollTo 与 .center 锚错误?

所以我尝试使用 ScrollViewReader 以编程方式滚动水平滚动视图。我认为它会像 UIKit 中带有 .centeredHorizo​​ntally 的 scrollToItem 一样工作,并且在大多数情况下它确实如此,但是滚动视图中的最后几个元素被强制滚动到屏幕的中心,尽管事实上滚动视图不是t 通常能够滚动那么远(至少在释放拖动后不会回弹)。这最终会在屏幕的后半部分创建空白。

我已经看到了一些关于此的其他问题,似乎普遍认为这不是错误?一方面,我想我们是在告诉滚动视图将项目居中,它就是这样做的——所以,不是错误吗?另一方面,这不是 UIKit 中类似功能的工作方式。此外,这种行为只发生在滚动视图的尾端!如果这是预期的行为,我希望使用 .center 锚滚动到滚动视图中的第一个元素会强制它进入屏幕中心并留下前导空白,但这不会发生。

有一个优雅的解决方案吗?或者我们是否必须计算元素的宽度 + 间距并根据屏幕宽度确定我们应该锚定 .center 还是只滚动到带有锚定 .trailing 的最后一个元素以复制 UIKit 行为?

0 投票
1 回答
326 浏览

ios - 当总内容宽度小于屏幕宽度时,SwiftUI如何在动态水平滚动视图中居中内容

我有一个水平滚动视图,它显示了来自动态图像数组的一堆图像。当总内容宽度大于屏幕宽度时,一切都很好。但是,如果说数组中只有一个图像,它将前导对齐,这是默认行为。

当总内容宽度小于屏幕宽度并且不确定如何实现时,我希望内容居中:

所以在这种情况下,如果只有一个图像它是对齐的,但我希望它居中,直到内容填满屏幕然后滚动。我不介意反弹或不反弹,直到它填满屏幕。

0 投票
2 回答
538 浏览

ios - SwiftUI - 计算 ScrollView 中长 GeometryReader 的高度

基于这个问题:SwiftUI - Drawing (curved) paths between views

我使用GeometryReader. 问题是,现在屏幕显示太长了(有 15 个这样的视图,但您在这里只能看到 6 个):

在此处输入图像描述

所以......我ScrollView在整个事情上加了一个。GeometryReader因为否则所有的观点都是错位的。这是代码:

(内容基本上就是1.根据屏幕大小计算点,2.沿点绘制路径,3.点上放圆)

问题:
现在我明白GeometryReader需要从父母和ScrollView孩子那里得到它的高度,这变成了一个“鸡蛋问题”。所以我想GeometryReader手动计算高度。


我的尝试

第一次尝试

最简单的方法是取一些固定值并计算一个非常粗略的值。我只是将其添加到GeometryReader

这行得通。但是现在我有一个很长的屏幕,底部有不必要的空间。根据手机型号,它可能看起来完全不同。

第二次尝试

一种潜在的解决方案似乎是使用DispatchQueue.main.asyncinside.body并将@State变量设置为计算出来的孩子的高度。如此处所述:https ://stackoverflow.com/a/61315678/1972372

所以:

这根本不起作用。由于ScrollView某种原因,它会收到一个 100 或 10 的固定值,并且永远不会改变。我尝试将该.background(...)块放在任何一个孩子身上以尝试将每个孩子的值相加,但这只会创建一个无限循环。但它似乎有可能以某种方式解决。

第三次尝试

使用PreferenceKeys类似于本教程或此答案:https ://stackoverflow.com/a/64293734/1972372 。

这似乎真的应该工作。我在ZStack里面放置了GeometryReader一个可以抓取的视图height并添加了一个类似.background(...)的:

一起来吧.onPreferenceChange(...)

但不幸的是,这在所有尝试中工作得最少,因为它根本没有改变,只在开始时调用一次,基值为 10。我尝试将它放在所有子视图上,但结果很奇怪,所以我已经删除了代码那。


需要帮助

我现在觉得只是使用愚蠢但有效的第一次尝试解决方案,只是为了让我免于其他两个的头痛。

有人可以看到我在尝试 2 或 3 中做错了什么以及为什么我没有设法收到我想要的结果吗?因为看起来他们应该工作。


完整代码

根据要求,这是完整的课程(使用第一次尝试技术):

0 投票
0 回答
243 浏览

ios - SwiftUI iOS 14/15 无法点击 ScrollView 中 Spacer 下方的按钮

Button在SwiftUI中,我SpacerScrollView. ScrollView窃取点击手势,因此永远Button看不到点击。

因此,例如,此示例中的按钮不起作用:

这个版本——除了没有 ScrollView 其他一切都一样——工作正常:

这样就排除了 VStack、ZStack 和 Spacer。

我已经尝试.allowsHitTesting(false)在 ScrollView 中的 Spacer 上使用,并且也尝试过.disabled(true)(并结合使用)。添加.allowsHitTesting(false)到 ScrollView 会使按钮工作,但当然会破坏 ScrollView。

我还尝试.foregroundColor(.clear)在 Spacer 上进行设置。

对于它的价值,我在 Xcode 13.0 Beta 5 测试与 iOS 15.0 beta 7 以及 Xcode 12.5.1 与 iOS 14.7.1 的测试中具有相同的行为。

我没主意了。似乎它应该是世界上最简单的事情,但我想不出办法解决这个问题。

任何帮助是极大的赞赏!

0 投票
0 回答
46 浏览

swiftui - 几何阅读器和 Firebase 请求

我正在按照不同的课程、教程等自己学习 SwiftUI。

到目前为止一切顺利,但我遇到了一个我找不到解决方案的问题,所以在调查了几个小时后,我决定寻求帮助。

目前,我正在尝试模拟一个社交媒体应用程序,人们可以在其中发布和关注等。我的大部分工作都在工作,但是当我尝试拉动刷新时问题就来了。

我有下一个代码;

而且我还有下一个功能。

我正在使用版本 13.0 beta 5 (13A5212g),开发目标是 IOS 15

上面的代码在更新数据时起作用(当下拉刷新时,它会调用我的 ViewModel 中名为 fetchPosts 的函数)

问题是,每次向下滚动一点几何阅读器时,它都会在我的“PostCell”中获取数据,帖子单元格对 firebase 有不同的调用(对于帖子内容和发布帖子的用户)

有谁知道代码有什么问题?欢迎任何提示。如果需要,我可以为我的“postcell”或其他任何东西提供代码。