使 SwiftUI 矩形与另一个矩形具有相同的高度或宽度

2023-12-15

对于 macOS 应用程序中的 SwiftUI 布局,我有三个矩形,如下所示:

layout 1

生成此布局的代码是:

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            HStack {
                ZStack {
                    Rectangle()
                        .fill(Color.purple)
                        .frame(width: 20)
                    Text("1")
                        .font(.subheadline)
                        .foregroundColor(.white)
                }
                
                ZStack {
                    Rectangle()
                        .fill(Color.orange)
                    Text("2")
                        .font(.subheadline)
                        .foregroundColor(.white)
                }
            }
            
            HStack {                
                ZStack {
                    Rectangle()
                        .fill(Color.red)
                        .frame(height: 20)
                    Text("3")
                           .font(.subheadline)
                           .foregroundColor(.white)
                }
            }
        }
        .frame(minWidth: 400, minHeight: 250)
    }
}

我的目标是使矩形 1 与矩形 2 具有相同的高度,使矩形 3 与矩形 2 具有相同的宽度。当窗口大小发生更改时,矩形之间的大小关系应保持不变。正确完成后,最终结果应如下所示:

layout 2

我怎样才能在 SwiftUI 中实现这一点?


这是一种基于视图偏好的工作方法。使用 Xcode 11.4 / macOS 10.15.6 进行测试

demo

struct ViewWidthKey: PreferenceKey {
    typealias Value = CGFloat
    static var defaultValue: CGFloat { 0 }
    static func reduce(value: inout Value, nextValue: () -> Value) {
        value = value + nextValue()
    }
}

struct ContentView: View {
    @State private var boxWidth = CGFloat.zero
    var body: some View {
        VStack {
            HStack {
                ZStack {
                    Rectangle()
                        .fill(Color.purple)
                        .frame(width: 20)
                    Text("1")
                        .font(.subheadline)
                        .foregroundColor(.white)
                }

                ZStack {
                    Rectangle()
                        .fill(Color.orange)
                    Text("2")
                        .font(.subheadline)
                        .foregroundColor(.white)
                }
                .background(GeometryReader {
                    Color.clear.preference(key: ViewWidthKey.self,
                        value: $0.frame(in: .local).size.width) })
            }

            HStack {
                ZStack {
                    Rectangle()
                        .fill(Color.red)
                        .frame(height: 20)
                    Text("3")
                           .font(.subheadline)
                           .foregroundColor(.white)
                }.frame(width: boxWidth)
            }.frame(maxWidth: .infinity, alignment: .bottomTrailing)
        }
        .onPreferenceChange(ViewWidthKey.self) { self.boxWidth = $0 }
        .frame(minWidth: 400, minHeight: 250)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使 SwiftUI 矩形与另一个矩形具有相同的高度或宽度 的相关文章

  • Firebase数据库在批准后保存数据

    我在 iOS 应用程序上使用 firebase 数据库 我正在快速写作 我正在使用 发送 按钮在我的 firebaseDatabase 上写入数据 例如文本字段和标签值 有什么方法可以接受或拒绝我的数据库中的数据吗 我的意思是 如果用户向文
  • 如何在 Swift 中使用具有相同协议变量的多个协议?

    我很快就实现了两个协议 GADCustomEventInterstitial and GADCustomEventBanner 这两个协议都需要一个名为delegate delegate每个协议中的类型不同 因此会产生冲突 class Ch
  • 在单独的类中录制和播放语音 (Swift3)

    我使用了许多用于录制和播放声音的代码 但其中大多数不在 swift3 中 并且它们在我的应用程序中不起作用 This https github com genedelisa AVFoundationRecorder代码有效 但我想从视图控制
  • 计算 Swift 4 中的时差

    如果我有两个变量 10 30 和另一个 1 20 有没有办法获得它们之间的 2小时50分钟 的时间差 我在下面尝试过这个 func calcTime time1 String time2 String gt String let time1
  • 在 for-in 循环中使用尾随闭包

    我在用着map for in 循环中的数组函数如下 let numbers 2 4 6 8 10 for doubled in numbers map 0 2 compile error print doubled 这会产生编译错误 使用未
  • Mac OS X 的自动热键替代品? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 为什么 Swift 语言将 8 位二进制值赋给 Int8 类型的 var 时会出现溢出?

    当我在操场上写下这一行时 let firstBits Int8 0b11111111 出现错误 存储到 Int8 时整数文字溢出 由于 Int8 是有符号值 其范围是从 128 到 127 从左起第一位代表单数 减号或加号 其余 7 位代表
  • Pythonlibs3 CMake 和 macOS

    更新2 将以下两行添加到我的 CMake 文件中时 成功找到了 python 3 及其库 这只在终端中工作的原因是因为 CLion 使用其捆绑版本的 CMake 3 6 3 而我的终端使用的更新版本 3 7 2 正确找到了 python F
  • iOS 应用程序中的谷歌地图实时交通状况?

    如何使用 google 地图 sdk 或 api 在 ios 应用程序中添加当前交通状况 如下图所示 有 javascript api 但我没有找到任何适用于 iOS 应用程序的解决方案 只需在 iOS SDK 中添加一行代码即可启用或禁用
  • 尝试在 Xcode 中为 OS X 应用程序设置 Tab 键顺序

    我正在使用 Xcode 7 3 构建 OS X 桌面应用程序 并尝试为其中一个表单设置 Tab 键顺序 我发现有几篇文章解释了 Xcode 4 的类似问题 但没有任何进展 https www youtube com watch v SRrE
  • 从呈现的视图控制器访问呈现的视图控制器?

    我有一个视图控制器 包含我的菜单 显示在另一个视图控制器 我的应用程序 之上 我需要从呈现的视图控制器 我的菜单 访问呈现的视图控制器 在我的菜单下方 例如访问某些变量或使呈现的视图控制器执行其segues之一 但是 我就是不知道该怎么做
  • bash - 从文本文件中删除多行不同的文本

    我正在处理大量日志文件 并且大多数日志文件都有大量被记录多次的重复字符串 为了使与此类事情没有太多关系的其他人 也为我自己 轻松查看日志 我想制作一个脚本来删除一些可能对其他人造成 误报 的文本行 嘿管理员 我多次出现这些错误 gt 叹息
  • 使用 Swift 更改整个应用程序中的 UILabel 文本颜色

    在 Swift 中有什么方法可以在整个应用程序中立即更改 UILabel 的文本颜色属性吗 我尝试过使用外观属性 但这不适用于 UILabel textColor 任何方式或任何同样工作的库 一种方法是使用颜色设置 首先在您的 xcasse
  • 可达性更改通知应仅调用一次

    我在我的 swift 项目中使用了 Reachability 我在 AppDelegate 中有以下代码 NSNotificationCenter defaultCenter addObserver self selector reacha
  • 在 MACOSX 上找不到“Python.h”文件,如何解决这个问题?

    pip3 安装 PyAudio 0 2 12默认为用户安装 因为普通站点包不可写 收集PyAudio 0 2 12 使用缓存的 PyAudio 0 2 12 tar gz 42 kB 安装构建依赖项 完成 获取建造轮子的要求 完成 准备元数
  • npm 不起作用,总是出现此错误 -> 错误:找不到模块 'are-we-there-yet'

    我尝试在 Mac 上使用 Yosemite 安装 grunt 节点已经安装在最新版本中 如果我在终端中输入 node v 我会得到 v0 12 5 行 那挺好的 但是当我想用 npm 安装某些东西时 我只得到一个错误 我尝试了 sudo n
  • SwiftUI 多个标签垂直对齐

    有很多解决方案可以尝试使用 VStack 内的 HStack 在 SwiftUI 中对齐多个图像和文本 有什么办法可以实现多个标签吗 添加到列表中时 多个标签会自动垂直对齐 当它们嵌入到 VStack 中时 是否有一种简单的方法可以做到这一
  • 使用导航控制器在 Storyboard 中呈现视图控制器 - Swift

    我目前在下面的新故事板中显示了一个 viewController var storyboard UIStoryboard UIStoryboard name AccountStoryboard bundle nil var vc Welco
  • 获取 Swift 子目录中资源的所有 URL

    我正在尝试为 iOS 应用程序的子目录中的所有资源创建 URL 数组 我似乎无法到达正确的路径 即使我不知道名称 我也希望能够检索 URL 即我不想将文件名硬编码到代码中 Below is a screen shot of the hier
  • 您可以严格泛型类型或为一个参数指定多个类型吗?

    例如我想指定一个类型可能是Integer or String并将其用作特殊类型func我试过typealias但它不会解决这个问题 因为类型别名不能有or参数作为其唯一用途 因此请考虑下面的情况 typealias alis StringP

随机推荐

  • 如何从内存中删除多个 pandas (python) 数据帧以节省 RAM?

    我在预处理过程中创建了很多数据帧 由于我的 6GB RAM 有限 我想从 RAM 中删除所有不必要的数据帧 以避免在 scikit learn 中运行 GRIDSEARCHCV 时内存不足 1 是否有一个函数可以仅列出当前加载到内存中的所有
  • 在 MATLAB 中叠加两个图像

    我想在matlab中叠加两个相同尺寸的图像 我尝试使用imfuse功能 但我得到的图像与我想要的不一样 第一张图像是对原始图像应用 Canny 边缘检测器后获得的图像的负片 我想将这个带有黑边的负片图像强加到我的原始图像上 有人可以建议一些
  • 使用 selenium 和 python 等待表完全加载

    我想从表中的页面中抓取一些数据 所以我只关心表中的数据 早些时候我使用Mechanize 但我发现有时会丢失一些数据 特别是在表格底部 谷歌搜索 我发现这可能是由于 mechanize 不处理 Jquery Ajax 造成的 所以我今天改用
  • 找不到 swig.exe:尝试安装 pylinkgrammar 0.2.14 时出错

    当我尝试安装 pylinkgrammar 0 2 14 时出现错误 包括 pylinkgrammar setup py 错误的构建轮 命令 swig exe 失败 没有这样的文件或目录 构建 pylinkgrammar 失败 我该如何解决此
  • 如何使用属性文件配置 log4j

    如何让 log4j 获取属性文件 我正在编写一个 Java 桌面应用程序 我想使用 log4j 在我的主要方法中 如果有这个 PropertyConfigurator configure log4j properties 当我打开 Jar
  • 从页面/组件中的服务共享相同的 Observable

    我正在尝试订阅相同的内容Observable多次但不起作用 我有一个提供者可以为我提供Observable from AngularFirestore目的 这是我的提供者 Injectable export class MyProvider
  • 如何根据多行中的值对数据框的列进行排序?

    例如 df pd DataFrame x 1 1 1 2 3 3 y a a c b b b ct pd crosstab df x df y ct y a b c x 1 2 0 1 2 0 1 0 3 0 2 0 如何根据 row1 r
  • 功能制作

    嗨 我是函数式编程的新手 我所做的是 gt gt gt g lambda x x 2 gt gt gt f g gt gt gt g lambda x f f x gt gt gt g 9 36 现在 它还没有创建g作为一个不间断的递归函数
  • 如何在脚本中使用跳转主机/跳转服务器

    我需要编写一个脚本 以便能够在我们安全的场外实验室中的测试服务器上运行命令 问题是这些测试服务器位于跳转服务器 跳转主机后面 我手动输入 bash ssh A jumphost jumphost ssh server1 或者我编辑了我的个人
  • F# 中的 NullReferenceException

    当我单步执行以下代码时 report第二行为空 但是 第三行生成 NullReferenceException member this setTaggedResearchReportList index int taggedResearch
  • org.codehaus.jackson.map.JsonMappingException:无限递归(StackOverflowError)

    我正在尝试一些非常基本的网络服务 每次尝试返回 Prtnr 对象时都会出现此异常 Uncaught exception thrown in one of the service methods of the servlet spitter
  • 通过 JS 中的 XMLHttpRequest 对象发布表单数据? (跨浏览器)

    我试图在 js 中发布表单数据 我有这个代码 var formData new FormData formData append username Groucho formData append accountnum 123456 form
  • 使用Java将XSD转换为树结构

    我想生成 XML 模式的文档 我的目标是分析 xsd 文件并将其显示为树结构 解析所有复杂 匿名类型 此外 我需要用其基数 由模式定义 来注释该树中的所有项目 下面的小例子可能有助于澄清我的问题 a xsd 文件
  • Xamarin中的接口回调

    我正在尝试使用 C 从 Xamarin 内部的 java 库编写接口回调 下面是代码片段 Connector getInstance login email new ILoginCallback Override public void o
  • 仅从 SIM 卡获取本地电话簿联系人 android

    我想知道是否可以仅获取 SIM 卡或电话簿中存在的联系人 现在我正在使用以下代码来获取联系人 它会获取所有联系人 甚至是我的 Gmail 和 Facebook 联系人 Cursor cursor getContentResolver que
  • OxyPlot:如何使用轴标签格式化程序并显示 Y 标签?

    我在 Xamarin iOS 项目中使用 Oxyplot 来绘制条形图 这就是我的图表目前的样子 这里不是 x 轴值 而是数字 我想显示 sun mon true wed 我可以看到 CategoryAxis 有一个名为 LabelForm
  • 我正确使用 utf8::is_utf8 吗?

    这工作正常吗 有些错误消息已经被解码 有些需要解码才能得到正确的输出 usr bin env perl use warnings use strict use utf8 use open qw utf8 std use Encode qw
  • Jquery ui 组合框(自动完成)消失

    我正在尝试这样做http jqueryui com autocomplete combobox问题是 当我将鼠标悬停在选项上时 选项将消失 并显示建议 x 与任何项目都不匹配 其中 x 是我在组合框中写的字母 现在我发布网站上的脚本 fun
  • 优化重复的 matlab 代码

    我正在优化一个模型 该模型获取一些天气数据 然后将云转换为多边形 以便可以进一步利用它们 该代码可以工作 但速度很慢 通过运行探查器 我发现正在调用以下几行106360430次 处理时间大约为 50 秒 有什么办法可以让这些线路更有效率吗
  • 使 SwiftUI 矩形与另一个矩形具有相同的高度或宽度

    对于 macOS 应用程序中的 SwiftUI 布局 我有三个矩形 如下所示 生成此布局的代码是 import SwiftUI struct ContentView View var body some View VStack HStack