如何在 SwiftUI 中的 ForEach 中嵌入的 HStack 中设置相对宽度?

2024-01-02

我想创建属性列表(不使用列表视图)。每个属性都是一个 HStack,其中包含两个文本:名称和值。我希望名称文本始终占整个 HStack 宽度的 30%,而值文本则使用其余的水平空间。每个属性的高度取决于内容。

我尝试通过以下观点来实现它:

struct FatherList: View {
    let attributes: Attributes
    
    init(_ attributes: Attributes) {
        self.attributes = attributes
    }
    
    var body: some View {
        VStack(spacing: CGFloat.spacing.medium) {
            ForEach(
                attributes,
                id: \.name,
                content: ChildView.init
            )
        }
    }
}

其中包含以下 ChildView:

struct ChildView: View {
    let listItem: Product.Attribute
    
    init(_ attribute: Product.Attribute) {
        self.attribute = attribute
    }
    
    var body: some View {
        GeometryReader { geometry in
            HStack(alignment: .top, spacing: 0) {
                Text(attribute.name)
                    .bold()
                    .frame(width: 0.3 * geometry.size.width)
                    .background(Color.yellow)
                Text(attribute.value)
            }
            .fixedSize(horizontal: false, vertical: true)
            .background(Color.red)
        }
    }
}

我得到的结果是这样的:

子视图重叠,这不是我想要的,我希望子视图展开并相互跟随。我正在使用 GeometryReader 来完成我上面描述的相对宽度。我究竟做错了什么?


这是可能解决方案的演示。使用 Xcode 11.4 / iOS 13.4 进行测试

Note: ViewHeightKey取自这是我的另一个解决方案 https://stackoverflow.com/a/62561752/12299030

struct ChildView: View {
    let attribute: Attribute

    @State private var fitHeight = CGFloat.zero

    var body: some View {
        GeometryReader { geometry in
            HStack(alignment: .top, spacing: 0) {
                Text(self.attribute.name)
                    .bold()
                    .frame(width: 0.3 * geometry.size.width, alignment: .leading)
                    .background(Color.yellow)
                Text(self.attribute.value)
                    .fixedSize(horizontal: false, vertical: true)
                    .frame(width: 0.7 * geometry.size.width, alignment: .leading)
            }
            .background(Color.red)
            .background(GeometryReader {
                Color.clear.preference(key: ViewHeightKey.self,
                    value: $0.frame(in: .local).size.height) })
        }
        .onPreferenceChange(ViewHeightKey.self) { self.fitHeight = $0 }
        .frame(height: fitHeight)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 SwiftUI 中的 ForEach 中嵌入的 HStack 中设置相对宽度? 的相关文章

  • UIScrollView 在缩放或滚动时阻止所有触摸

    当 UIScrollView 通过捏合手势或滚动进行缩放时 我无法按同一窗口中的任何其他按钮 有什么办法可以启用这种行为吗 这就像滚动视图具有独占触摸 尽管我尝试将其明确设置为NO 我在视图中有一个滚动视图 我希望它仅在用户按住滚动按钮时滚
  • 在iOS上,setNeedsDisplay确实不会导致drawRect被调用...除非CALayer的display或drawInContext最终调用了drawRect?

    我不太明白 CALayer 是怎么做的display and drawInContext与 有关drawRect视图中 如果我有一个 NSTimer 来设置 self view setNeedsDisplay 每 1 秒 然后drawRec
  • 你能以编程方式调用 Siri 吗?

    我想创建一个 UITextView 的子类 其中包含一个自定义按钮来调用 Siri 用于其语音到文本的文本输入 这可能吗 我不介意是否显示键盘 我只想提供自己的按钮来打开 Siri 不幸的是 你不能这样做 从 iOS 6 0 开始 使用 S
  • JS:event.touches 属性如何工作?

    我不明白如何使用 event touches 属性 例如 要获取 iPad iPhone 上的手指数量 您应该使用 event touches length 那么为什么这个示例代码不起作用呢 image bind touchstart fu
  • iOS 7 仅横向应用程序无法访问照片库

    我有一个仅限风景的应用程序 每当我访问照片库时 应用程序就会崩溃 因为UIImagePickerViewController正在尝试以纵向模式加载 应用程序在 iOS 5 和 6 中运行良好 我收到以下错误 由于未捕获的异常而终止应用程序
  • 存储应用内购买的正确且安全的方式

    在设备上存储应用内购买的最佳方式是什么 这样购买也可以离线访问 但是 购买的安全性没有受到损害 不要在设备上存储任何有价值的东西 因为它不可信 并且很容易被有动机的人破坏 现在 所有这一切都取决于所购买物品的类型和价值 以及如果物品受损会发
  • 访问 iPhone 上用户的短信

    有没有一种方法可以访问用户的短信 没有互联网连接 显然 不尝试获取客户的消息 并分析应用程序中的文本 如果没有 出于安全原因 这是完全可以理解的 但我想我还是会问 不 你只能发送它们 S http developer apple com l
  • 应用程序名称中的撇号

    我打算在 Apple 商店中发布一款标题中包含撇号的应用程序 我注意到 当 目标 名称包含撇号时 XCode 在构建代码时已经存在问题 我已经通过使用以下字符设法解决了这个问题 暂时 与以下相反 这似乎构建得不错 但我有点担心以后可能会发生
  • 从故事板向 UILabel 属性字符串添加下划线失败

    从故事板中我选择有问题的 UILabel 然后在属性检查器 gt 标签 gt 我选择 属性 同样在属性检查器 gt 标签 gt 文本 gt 我选择内容 然后我单击字体图标并选择下划线 基本上 我从弹出的 字体 窗口中选择的任何更改都不会生效
  • 如何在 ios7 中的 UITextfield 中禁用复制/粘贴选项

    I tried implementation UITextField DisableCopyPaste BOOL canPerformAction SEL action withSender id sender return NO retu
  • 为什么我不能使用“Type”作为嵌入结构中的枚举的名称?

    以下情况无法编译 struct S1 enum Type case One Two Three let e1 Type let i Int func f1 e S1 Type S1 e1 e i 1 有错误 error cannot inv
  • iOS:同时录制和播放的示例代码

    我正在为多轨录音机设计一个简单的概念验证 明显的起点是从文件 A caf 播放到耳机 同时将麦克风输入记录到文件 B caf 这个问题 同时录制和播放音频 https stackoverflow com questions 4215180
  • 如何将 UIview 添加到 imageView,同时确保 UIView 的内容位于其框架内?

    我有一个超级视图 其中包含ImageView a testView和一些按钮 我创建了一个UIView其中包含ImageView2 and a removebutton 当我添加UIView to UIImageView 内容UIView不
  • iOS9 按需访问和下载资源

    我正在尝试实现新的 iOS9 功能应用程序细化 我了解如何在 Xcode 7 中标记图像并启用按需资源 但我不明白如何在我的应用程序中实现 NSBundleResourceRequest 有人可以帮助我 我将不胜感激 大部分信息都可以在 A
  • 如何使用mapkit和swift在设定位置覆盖一个圆圈

    我在尝试弄清楚如何在与用户位置不同的所需位置显示透明圆形或矩形时遇到困难 我是 Mapkit 的初学者 所以提前致谢 class FirstViewController UIViewController MKMapViewDelegate
  • 如何让 UIPickerView 滑动到屏幕的一半?

    when someone clicks clothing I want the UIPickerView to slide up as in the example as follows 有人可以展示代码示例吗 正如 dsc 和 Jason
  • 规划带有透明覆盖图像的科尔多瓦相机插件

    我正在编写和应用程序 需要在相机上显示透明图像 例如作为构图指南 该应用程序必须至少在 iOS 和 Android 上发布 到目前为止 我已经找到了一个具有功能 iOS 源的插件 okstate plugin camera overlay
  • 如何检查 iPhone 的 IPv6 地址

    我已经根据苹果的建议设置了 IPv6 nat64 环境 https developer apple com library ios documentation NetworkingInternetWeb Conceptual Network
  • Twitter iOS 个人资料页面配置

    我正在尝试构建一个类似于 Twitter 个人资料页面的页面 看起来他们正在使用基本的UITableView 最上面的配置文件就是tableHeaderView 这些选项卡是UISegmentedControl在SectionRowHead
  • iOS 7 导航栏在 viewDidAppear 上跳跃/拉伸

    I am trying to update my app for iOS 7 When my views appear on the screen you can see that there is a gap between the na

随机推荐

  • 尝试在路径 file:///var/mobile/Media/PhotoData/Photos.sqlite 添加只读文件?

    我刚刚更新到新的 Xcode beta 6 0 当尝试使用 iOS 8 为 ipad mini 进行编译时 我在控制台中收到一个奇怪的错误 尝试在路径 file var mobile Media PhotoData Photos sqlit
  • JTextPane 换行行为

    最近我一直在做一个Java文本编辑器项目 我想使用JTextPane更换旧的JTextArea以实现语法高亮 然而 一个JTextPane缺乏方法JTextArea 例如append getLineStartOffset 等 我想在我的课堂
  • 如何在 Spark 2.0 中启用笛卡尔连接? [复制]

    这个问题在这里已经有答案了 我必须在 Spark 2 0 中交叉连接 2 个数据帧 但遇到以下错误 用户类抛出异常 org apache spark sql AnalysisException Cartesian joins could b
  • 序列化器仅来自指定控制器的方法 - Spring、JSON Jackson

    我有 2 个控制器和一个具有自定义序列化字段的 get 方法 如下所示 JsonSerialize using MySerialization class 但我想在我从 A 控制器而不是 B 控制器调用方法时进行此序列化 我如何指定这一点
  • 使用 JUnit 内部类中的测试用例

    我读到构建单元测试 http haacked com archive 2012 01 02 structuring unit tests aspx每个类都有一个测试类 每个方法有一个内部类 我认为这似乎是一种组织测试的便捷方法 因此我在 J
  • 当从两个数据框构建绘图时有两个图例

    我有两个这样的数据框 library ggplot2 set seed 1 x1 rnorm 100 y1 rnorm 100 x2 rnorm 100 y2 rnorm 100 df1 data frame x x1 y y1 col1
  • 在 pdfmake 中嵌入背景图像

    我正在使用 pdfmakehttp bpampuch github io pdfmake index html gettingstarted http bpampuch github io pdfmake index html gettin
  • JavaPackage 对象不可调用错误:Pyspark

    像 dataframe show sqlContext read json 这样的操作工作正常 但大多数函数都会给出 JavaPackage object is not callable error 例如 当我这样做时 dataFrame
  • 当应用程序进入前台时查找当前视图。 IOS

    当应用程序激活时 我们如何找到当前哪个视图是第一响应者 我知道应用程序委托 applicationWillEnterForeground 和 applicationDidBecomeActive 在某些情况下将被调用 我如何使用它来亲密查看
  • django 模板中的 user.is_authenticated 遇到问题

    很抱歉 如果您在我之前问这个问题时尝试帮助我 不得不删除该问题 因为由于某种原因我不被允许编辑其他信息 我正在努力在我的 Django 网站上实现用户身份验证 一切正常 我的视图 模型 url 等都设置好了 用户可以注册 登录 注销 我遇到
  • 将 MarvinFramework 添加到 Tomcat7 上的 Web 应用程序

    我有一个JerseyWeb 应用程序运行于Tomcat并想要整合MarvinFramework用于图像处理 基本上我想减少噪音 灰度和缩放图像以进行进一步处理 The 马文框架 http marvinproject sourceforge
  • Cmder bash脚本执行

    我在 Windows 中创建了基本脚本 bin bash echo Hello 我正在使用 Cmder ConEmu 衍生品 我尝试使用 chmod 更改权限 但它们是相同的 我不知道如何执行这个脚本 正常的 Linux 方式是 hello
  • R 编译错误的 RGL 包

    尝试在 arch linux x86 64 上为 r 编译 rgl 我只复制了安装的错误部分 这是我最近更新 R 后发生的 知道如何解决这个问题吗 g I usr include R DNDEBUG DHAVE PNG H I usr in
  • 按位置列出观测值数量

    这里需要帮助 我正在尝试创建一个新列 使用纬度和经度列出餐厅 200 米范围内的餐厅数量 我在 stackoverflow 上找不到任何东西 而且我不是 R 忍者 任何帮助 将不胜感激 head business id restaurant
  • 带有azure ad的net core使用oidc和登录后浏览器后退按钮导致异常

    因此 我有一个新创建的 netcore 应用程序链接到我的 azure Active Directory 帐户 中间件设置如下 app UseCookieAuthentication new CookieAuthenticationOpti
  • 正确处理 React Hooks 以将摄像机流式传输到 HTML 视频元素

    我一直在尝试编写一个 React Hook 来处理从用户相机捕获的流式视频到 HTML 视频元素 我无法找到处理初始化和取消初始化相机和 HTML 视频元素的最佳方法 我尝试在挂钩末尾添加清理功能 但我的尝试最终导致视频反复重新初始化或出现
  • 使用 Codedom 生成 C# 自动属性

    有没有办法使用 Codedom 生成 C 自动属性or也许我可以使用另一组库 您可以使用 CodeSnippetTypeMember 类来实现此目的 例如 CodeTypeDeclaration newType new CodeTypeDe
  • 了解自动实现的属性

    我有一个使用自动实现属性的简单类 Public Class foo public foo public string BarName get set 显然 我在整个类中使用了变量 BarName 现在需要在设置属性值时添加逻辑 它必须全部大
  • opencv 对象跟踪的边界框定义

    如何定义采用 opencv tracker init 函数的边界框对象 是吗 xcenter ycenter boxwidht boxheight or xmin ymin xmax ymax or ymin xmin ymax xmax
  • 如何在 SwiftUI 中的 ForEach 中嵌入的 HStack 中设置相对宽度?

    我想创建属性列表 不使用列表视图 每个属性都是一个 HStack 其中包含两个文本 名称和值 我希望名称文本始终占整个 HStack 宽度的 30 而值文本则使用其余的水平空间 每个属性的高度取决于内容 我尝试通过以下观点来实现它 stru