问题标签 [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.
swiftui - SwiftUI:如何在 GeometryReader 中获取文本的长度(以磅为单位)
我正在尝试做一个像这样的简单条形图。每个条都应该有一个值为 bar 的标签。如果它是一个大条,标签应该在顶部但在里面,如果它很小,它应该在外面。标签的字体应该适应用户的喜好。
到目前为止,我已经为一个条形图提供了此代码,图中的 7 个条形图只是一个具有七个不同数据点的 HStack()。
我的问题是:如何计算标签的长度(以像素/点为单位),以便可以使用var labelPositionY将其移动到正确的位置?现在我已经迭代了一种字体大小设置,但我希望它在所有条件下都是完美的......
PS:theValue.fixedLength1 是一个计算属性,它返回一个格式化的字符串
我的解决方案
所以......在意识到问题已经在另一篇文章中得到回答后,我想分享我的“最终”解决方案:
swift - 如何在 SwiftUI 中访问另一个 CoordinateSpace 的 safeAreaInsets
我正在尝试编写一个视图扩展,ViewModifier
它允许我将任何视图定位在CoordinateSpace
另一个视图中。到目前为止,我的代码确实有效,但如果 CoordinateSpaces 之一具有安全区域,它会出现对齐问题。我可以通过添加.edgesIgnoringSafeArea(.all)
到目标来修复它,CoordinateSpace
但我想使用这个扩展而不必担心其他坐标系统的安全区域。
澄清我的代码:
在我的代码中,第一个圆圈在 a 内HStack
,GeometryReader
并且设置了一个CoordinateSpace
被调用的"otherSpace"
。另一个 HStack 中的圆圈根据 中的位置设置其位置"otherSpace"
。第一个HStack
并且GeometryReader
在顶部,并且有edgeInset
20 个顶部。第二个没有。查看GeometryProxy
(中ViewModifier
)给我的值,我找不到一种方法来确定是否有一种方法来计算边缘插入。
到目前为止,这是我的代码:
更新图像。
第一张图片显示了.edgesIgnoringSafeArea(.all)
在目标圆上使用时的结果。无论目标圆(CoordinateSpace)是否有安全区域,我都想得到这个结果。但是当我删除时,.edgesIgnoringSafeArea(.all)
我得到了第二张图像,因为我的扩展不知道是否有安全区域,并且总是计算好像没有安全区域。
ios - SwiftUI HStack 元素等高
我希望两个按钮的高度相同,类似于Equal Height
UIKit 中的约束。
- 不想指定框架,让 SwiftUI 处理它,但 HStack 中的元素应该是相同的高度。
- 按钮应具有相同的宽度和高度,并适应较长的文本并增加其框架大小
- 两个按钮都应该显示它们的完整文本(不应该使用缩放/适合的字体)
示例代码
ios - SwiftUI:在 NavigationView 中嵌入父视图时不调用 PreferenceKey
DynamicScalingView
是一个子视图,有两个按钮,设计为具有相等的宽度和高度,使用preferencekey
问题:当DynamicScalingView
嵌入 NavigationView 时,它不再适应intrinsic
并增加其帧大小。当前没有导航的实现工作正常,但想了解如何在嵌入时解决此问题NavigationView
- 在示例视图中取消注释 NavigationView 以重现问题
DynamicScalingView
应该适应动态字体大小并增加其框架大小,保持按钮之间的宽度和高度相同。
XCode 12.2 和 iOS 14.2
ios - SwiftUI:如何在不使用几何阅读器的情况下根据框架的大小计算视图的大小?
下面的代码效果很好,但是几何读取导致我上游出现问题,所以我希望有相同的逻辑来基于可用空间构建视图的宽度,但不使用几何读取器。可能吗?
swift - 根据 GeometryReader 结果运行条件代码的视图扩展
我创建了一个 View 扩展来读取它的偏移量(灵感来自https://fivestars.blog/swiftui/swiftui-share-layout-information.html):
我也在使用 Federico 的 readSize 函数:
两者一起帮助我确定滚动视图中的子视图是否在屏幕上/在屏幕外:
这是检查可见性的 isOffscreen 函数:
一切正常。但是,我想将代码进一步优化为一个单独的扩展,该扩展根据输入的偏移量和 size.height 检查可见性,并且还接收关于可见时做什么的参数,即移动 readOffset 的闭包成为逻辑与扩展代码共存。
我不知道这是否可行,但认为值得一问。
ios - 保存 ScrollViews 位置并稍后滚动回它(偏移到位置)
我找到了一种使用 a和 a保存 ScrollViews偏移量的方法。GeometryReader
PreferenceKey
SwiftUI | 从 ScrollView 获取当前滚动位置
并且ScrollViewReader
有一种scrollTo
滚动到设定位置的方法。
问题是,第一个方法保存了一个偏移量,而第二种方法需要一个位置(或一个 id,这与我的位置类似)。如何将偏移量转换为位置/id,或者是否有任何其他方式来保存和加载 ScrollViews 位置?
这是我现在拥有的代码,但它没有按我想要的方式滚动:
在onAppear
我想设置scrollTarget
为保存位置的视图中。但它会滚动到任何地方,但不会滚动到我想要的位置。
我想过将偏移量除以一个项目的大小,但这真的是要走的路吗?听起来不太好。