问题标签 [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.
ios - SwiftUI ScrollView:查找当前在屏幕中心可见的子视图。子视图在 ScrollView 中的位置。偏好键。滚动视图代理
挑战:我想跟踪 ScrollView 的哪个子视图位于此 ScrollView 的可见区域的中间。
问题:我知道没有原生的 SwiftUI 方法来确定 ScrollView 的子视图当前是否在屏幕上可见。还是我在这里想念什么?
我的解决方案:我正在使用 PreferenceKey 收集子视图位置并在滚动 ScrollView 时连续发生的 onPreferenceChange(s) 行动:检查最靠近屏幕中心的视图。
问题:基于 PreferenceKey 的解决方案适用于一些子视图。但我需要跟踪多达 3000 个子视图(从数据库构建的大型结构化文档的视图)。大量视图的性能是不可接受的,即使在实施了一些我已经能够提出的优化之后。
我的问题是:有没有
- 一种提高下面所示解决方案性能的方法,或
- 应对这一挑战的不同方式
(iOS 14.4 / Xcode 12.4)
ios - 在不修改视图的情况下使用 GeometryReader
我试图在GeometryReader
这里使用基于可用大小构建视图,但是因为这个视图嵌入在带有填充的父视图中,所以它没有正确绘制。我从其他 SO 答案中知道,有些人说要使用GeometryReader
or.overlay
但.background
我无法在这里找到一种方法:
ios - SwiftUI 将几何阅读器与 ForEach 结合使用
我无法弄清楚为什么我的 ForEach 循环使我的视图无法在其父视图中正确缩放。如果我注释掉 ForEach 循环并取消注释//.frame(width: geometry.size.width, height: 10)
RoundedRectangle 在其父视图中正确缩放,但是当使用 ForEach 循环时,我的视图会流出屏幕。我已经仔细检查了CGFloat((sleepOrAwakeSpan.seconds / DataStore.sleepOrAwakeSpans.map { $0.endTime.timeIntervalSince($0.startTime) }.reduce(0, +)))
总数 = 100。所以我知道几何是正确的,并且我知道我预期的几何百分比是正确的,什么可能导致添加 ForEach 使其流出屏幕?
ios - SwiftUI:如何计算文本视图的宽度?
我需要考虑的文本视图数量未知(睡眠期间经过的时间)。每个文本视图只有一个小时,例如 Text("12")、Text("1") 等。
我需要知道所有组合小时文本视图的宽度,以便我可以从整体几何中相应地减去空间。下面是一个widthOfString
可能与 UIKit 一起使用但似乎无法在 SwiftUI 中计算正确大小的函数。我怎样才能做到这一点?
示例用法:
我的助手功能和扩展:
swiftui - 根据 SwiftUI 中的内容制作 VStack 高度
我想制作一张“卡片”,但高度取决于项目列表,我不知道如何根据我的尺寸列表设置不同的值......示例:
内容视图结构
ItemRow 结构体
PS。在 itemsList 中,您必须像这样创建一个struct
调用Order
:(不要介意硬编码值,我这样做是为了使示例更容易)
PS2。在 productList 你必须创建一个这样的struct
调用Product
:
ios - SwiftUI:如何在动态列表或 LazyVStack 中获取视图框架
我想在 LazyVStack 中获取视图的框架。嵌入在 ScrollView 中的 LazyVStack 显示聊天消息(文本和图像)。
因为内容是动态大小的,所以我无法使用 GeometryReader 代理。将 GeometryReader 放入我的 LazyVStack 会破坏布局。(我假设是因为动态大小。)。
有没有其他方法可以获取 LazyVStack 中的视图框架?
下面是我想要做的简单表示。理想情况下,我希望在 MessageView 中有一个 GeometryReader,但这会弄乱垂直间距。
将 MessageView 组合到 ChatView 中是不可取的,因为 MessageView 涉及很多视图并且需要是一个独立的结构。
swift - GeometryReader 的子视图溢出宽度
我目前正在使用 GeometryReader 和 Image 在 3 列网格中显示图像。在这个网格中,我希望当用户点击图像时,他们会看到更大的版本。
但是,当我实现它时,GeometryReader 无法正常运行。GeometryReader 中的图像超出了传递给 GeometryReader 的帧大小。
我检查过 GeometryReader 的大小是 1:1 的比例,但是当你看到视图层次的截图时,图像的大小是不同的。
下面是我的自定义图像视图的代码。
而 centerCropped 修饰符只是一组 resizable/scaletofill/frame/clipped 来使图像中心裁剪。
屏幕上的图像只是很好的图片。
但是,如果您点击第一张图片(turlip one)的右侧,它将改为在右侧显示图片。
为什么 Image 视图溢出而不是跟随 GeometryReader 的宽度?我搜索以找出解决方案,但没有出现类似的情况。