在 SwiftUI 中根据浅色或深色模式更改按钮样式修饰符

2023-12-11

我想设置自定义buttonStyle明暗模式按钮的修饰符。 如何根据浅色或深色模式更改buttonStyle Modifier?我想为浅色和深色模式的按钮设置自定义修饰符。

这是我的按钮代码,

Button(action: {
    print("button tapped")

}, label: {
    LinearGradient(gradient: Gradient(colors: [.darkBlueColor, .lightBlueColor]), startPoint: .top, endPoint: .bottom)
        .mask(Image(systemName: "ellipsis")
            .resizable()
            .aspectRatio(contentMode: .fit)
    ).frame(width: iPhoneSE ? 26 : 25, height: iPhoneSE ? 26 : 25, alignment: .center)
})
.buttonStyle(lightButtonStyle())

struct lightButtonStyle: ButtonStyle {

    func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
        .padding(10)
        .background(
            Group {
                if configuration.isPressed {
                    Circle()
                        .fill(Color.offWhite)
                        .overlay(

                            Circle()
                                .stroke(Color.lightGray2, lineWidth: 4)
                                .blur(radius: 1)
                                .offset(x: 2, y: 2)
                                .mask(Circle().fill(LinearGradient(Color.black, Color.clear)))
                        )
                        .overlay(
                            Circle()
                                .stroke(Color.white, lineWidth: 4)
                                .blur(radius: 1)
                                .offset(x: -2, y: -2)
                                .mask(Circle().fill(LinearGradient(Color.clear, Color.black)))
                        )
                } else {
                    Circle()
                        .fill(Color.offWhite)
                        .shadow(color: Color.white.opacity(0.8), radius: 1, x: -2, y: -2)
                        .shadow(color: Color.lightPurple.opacity(0.6), radius: 1, x: 2, y: 2)
                }
            }
        )
    }
}

对于深色模式,我有另一个具有不同颜色和阴影的按钮样式。

我知道我们可以像这样更改其他修饰符,

.fill(colorScheme == .dark ? Color.darkEnd : Color.white)

但有些我无法改变buttonStyle修饰符。


只要提出这个条件inside按钮样式修饰符,例如

// ... other your code
})
.buttonStyle(CustomButtonStyle(scheme: colorScheme)) // << here !!

并采用定制风格

struct CustomButtonStyle: ButtonStyle {
    var scheme: ColorScheme              // << here !!

    func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
        .padding(10)
            Group {
                if configuration.isPressed {
                    Circle()   // example of internal dependency on scheme
                        .fill(self.scheme == .dark ? Color.offBlack :  Color.offWhite)

    // .. other code here
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SwiftUI 中根据浅色或深色模式更改按钮样式修饰符 的相关文章

  • 如何从 ContentView 外部显示 SwiftUI 警报?

    我正在构建 Swift 应用程序 并试图找出如何显示警报 我有一个单独的 swift 文件正在执行一些计算 并且在某些条件下我希望它向用户显示警报 基本上告诉他们出了问题 然而 我见过的大多数例子都要求警报在ContentView或以其他方
  • 如何使用 Vapor 和 Leaf 将图像从浏览器上传到 Amazon S3?

    我已经设置了 AWS S3 存储桶 并且可以使用 Vapor 3 和 Postman 上传文件 PUT request 和标头 x amz acl public read 但我想从浏览器中执行此操作 我使用的是 leaf 那么如何从浏览器上
  • 将自定义数据包含到 iOS 故障转储中

    你好 堆栈溢出 有一个简单的问题要问您 当我的应用程序在用户的设备上崩溃时 是否可以将自定义错误数据嵌入到自动生成的 iOS 故障转储中 例如 我的 SQlite 数据库由于某种原因无法运行 例如 数据库文件已损坏 我无法从这个错误中恢复
  • SwiftUI 关闭从 NavigationView 呈现的模式表(Xcode Beta 5)

    我试图忽略通过呈现的模态视图 sheet在 SwiftUI 中 由Button这是在一个NavigationViews navigationBarItems 如下所示 struct ModalView View Environment pr
  • 有关 Swift 编译器选项的文档

    您好 我想开始在 Apple Swift 语言上运行一些微基准测试 然而 我觉得很难找到有关编译器优化的不同选项的适当文档 我读过很多关于其他人的语言微基准的问题和文章 但是如果能有一些关于该主题的可靠文档那就太好了 在最新的测试版中 使用
  • (Kiss)XML xpath 和默认命名空间

    我正在开发一个 iPhone 项目 需要解析一些 xml xml 可能包含也可能不包含默认名称空间 我需要知道如何解析 xml 以防它使用默认命名空间 由于我需要读取和写入 xml 因此我倾向于使用 KissXML 但我愿意接受建议 这是我
  • 按下按钮时应用不同的样式

    有没有办法在按下按钮时将样式应用于按钮 如果我有一种风格样式 xml
  • 如何让UITextView背景线与文字对齐?

    我正在尝试绘制 UITextView 的背景线 这是我用来画这些线的代码 CGContextBeginPath context CGContextSetStrokeColorWithColor context self horizontal
  • UIViewControllerAnimatedTransitioning:旋转更改后黑屏片段

    我已经创建了一个视图控制器转换 只要我不更改设备方向 一切都正常 图 1 显示了应有的屏幕 然后我切换到下一个视图控制器 在其中更改方向 现在我回到第一个视图控制器并再次切换方向 然后我得到的结果如图 2 所示 出现黑色边框 请不要介意屏幕
  • iOS 7 上 Safari 浏览器的用户代理

    我只想在带有 Safari 浏览器的 iPhone 和 iPod 中打开我的网站 对于 Chrome Dolphin 等任何其他浏览器 它不应该打开 但目前我从几乎所有设备获得相同的用户代理 对于Safari User Agent Stri
  • 调整 UIImage 的大小而不将其完全加载到内存中?

    我正在开发一个应用程序 用户可以在其中尝试加载非常非常大的图像 这些图像首先在表格视图中显示为缩略图 我的原始代码会在大图像上崩溃 因此我重写它以首先将图像直接下载到磁盘 是否有一种已知的方法可以调整磁盘上图像的大小 而无需通过以下方式将其
  • 如何向标准 UIButton 添加徽章? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以在标准中添加看起来标准的徽章UIButton 如果不支持半原生 那么实现此目的最简单的方法是什么 示例图片 这是 Sascha
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 如何解决 Xcode 5 中的红色(已移动)文件?

    在 Xcode 4 中 当您要移动文件时 可以通过单击右侧菜单中的按钮并通过 Finder 选择新位置来解析文件的新位置 在 Xcode 5 中 右侧菜单中没有按钮 我还没有找到任何方法通过右键单击文件或顶部菜单栏选项来指定文件的新位置 在
  • 如何更改特定区域的工作表的 DragGesture?

    如果我有一个打开工作表的按钮 Button action show true label Text Open sheet isPresented show Text Sheet view 整张纸是 可移动的 有一个DragGesture 有
  • Firebase ref.removeAllObservers() 是否也会递归删除子观察者?

    我看到了一些与此相关的问题 但没有一个真正证实了我的疑问 If I removeAllObservers 在父节点上 这是否也会递归地删除可能已附加在所有子节点和子节点的子节点等处的所有其他观察者 递归地 API 文档为removeAllO
  • iOS:如何知道 reloadData() 已完成其任务?

    我想滚动到给定索引 self boldRowPath 但是当我调试时scrollToRow之前执行reloadData 如何知道reloadData已完成 func getAllTimeEvent self arrAllTimeEvent
  • 如何更改 SwiftUI 列表中分隔符的颜色?

    我在 SwiftUI 中创建了一个列表 我想更改颜色或删除分隔符 因为在 UIKit 中 我们可以轻松更改 TableView 中分隔符的颜色 下面是 SwiftUI 中列表的代码和 UI 图片 State private var user
  • CoreBluetooth:检测设备超出范围/连接超时

    我正在设计一个 iOS 框架来处理多个 BLE 设备 均为同一类型 目前一切都运行良好 除了一件事 客户想要一个包含可用设备的列表 但是 我如何检测过去发现的设备何时不再可用 当我尝试连接到不再可用的设备时 会出现另一个问题 文档说 连接尝
  • ios - 如何声明静态变量? [复制]

    这个问题在这里已经有答案了 C 中声明的静态变量如下 private const string Host http 80dfgf7c22634nbbfb82339d46 cloudapp net private const string S

随机推荐

  • 关闭窗口 - 但不停止程序 - JAVA

    在我的程序中 如果发生某个操作 它会打开一个窗口 当我在此窗口中填写信息并输入按钮后 窗口将出现 dispose 该窗口是在我的主程序之外的程序中拾取的 但是当我关闭该窗口时 我的主程序将停止 我怎样才能防止这种情况发生 感谢您的帮助 您可
  • 使用NVM在gitlab-ci中安装特定的nodejs版本

    当我尝试使用 gitlab ci 安装 NVM 时 收到以下错误消息 gitlab ci yml 文件 stages test Testing tags docker stage test image ubuntu 18 04 before
  • 为 Node.js 应用程序构建 docker 映像在代理后面失败

    我在 docker 构建期间遇到了 npm 问题 我是一家公司代理的幕后黑手 阅读了大约 30 篇解决类似问题的文章 以及 stackoverflow 帖子 然而我仍然无法克服这一点 我能够 npm install 项目并在 docker
  • Google Apps 脚本停止从雅虎财经抓取数据

    用于从雅虎财经抓取历史数据的 Google Apps 脚本代码昨天停止工作 它突然给出错误 没有数据 data length 0 我认为错误出现在获取 JSON 时的第 8 行脚本中 但我没有必要的技能来修复它 如果您能帮助解决问题 我们将
  • 将数据框重塑为宽形状

    数据包含两个变量 id 和grade 每个id可以有多个记录 每个年级 dat lt data frame id c 1 1 1 2 2 2 2 3 3 4 5 5 5 grade c a b c a a b b d f c a e f 我
  • phpunit 无法在全新安装的 laravel 5.7 上运行

    我新安装的 Laravel 遇到问题 当我尝试使用时phpunit运行默认命令ExampleTest php 我懂了error D Laravel Rahimi0151 gt phpunit PHP Warning continue tar
  • Maven - 测试中的不同依赖版本

    我遇到了类似的问题Maven 2 测试和编译中的不同依赖版本但那里指定的答案不起作用 在我的项目中 我需要依赖 Hadoop 的 Cloudera 发行版和用于 JUnit 测试的 vanilla 版本 因为前者仅适用于 nix 当我尝试执
  • 根据给定的开放日期和关闭日期,生成一段时间内开放门票的计数

    我有一些门票的一组数据 其中datetime它们打开和关闭的时间 或NULL如果它们仍然开放 opened on closed on 2019 09 01 17 00 2020 01 01 13 37 2020 04 14 11 00 20
  • 使用Java本机接口时如何解决“致命:重定位仍然针对可分配但不可写的部分”?

    我正在尝试在 Java 代码中调用 C 函数 我有这个哈瓦代码 public class JavaToC public native void helloC static System loadLibrary HelloWorld publ
  • Eclipse 和 Spring Beans 的 EL 自动完成/代码辅助

    在 Eclipse 中 JSF EL 的自动完成功能仅适用于旧版 ManagedBean或 CDI 豆 Named 至少在使用 JBoss 工具插件时是这样 也可以看看 使用 Eclipse 的 Facelets 中的 EL 建议 自动完成
  • 将组的最大值分配给该组中的所有行

    我想将一个组的最大值分配给该组内的所有行 我怎么做 我有一个数据框 其中包含组的名称以及属于该组的最大学分数 course credits lt aggregate bsc academic Credits by list bsc acad
  • Android 4.3:如何连接多个蓝牙低功耗设备

    我的问题是 Android 4 3 客户端 可以与多个 BLE 设备 服务器 建立活动连接吗 如果是这样 我怎样才能实现它 到目前为止我做了什么 我尝试评估使用 BLE 和 Android 4 3 BLE API 可以实现的吞吐量 此外 我
  • 防止在 Windows 窗体中打开组合框控件的下拉区域

    我在 Windows 窗体中有一个自定义组合框控件 我想实现一个功能 其中根据某些条件不应显示下拉区域 即我需要防止组合框根据某些条件打开 我找到了一个可以实现此目的的链接 但它完全阻止了下拉区域的显示 我也无法根据自己的方便调整该方法 链
  • 通过忽略div标签javascript的内部元素来选择文本

  • pyodbc和ms access 2010连接错误

    如何使用 pyodbc 访问我的 Microsoft Access 2010 数据库 accdb 之前 我使用了 mdb 数据库 它在连接字符串为 ODBC CONN STR DRIVER Microsoft Access Driver m
  • 预引导加载屏幕

    我正在寻找一个预引导加载屏幕 类似于这个例子但对于 Angular 2 来说 我可以建议一种简单的 CSS 方法 首先添加 loadingdiv 到主 HTML 页面中 它应该遵循主应用程序组件元素 例如
  • JavaScript 拖放

    我正在寻找有人解释如何在 javascript 中拖放 我想要一条水平线 其中包含一些可自定义的图像 我看过这些的在线教程 但发现它们很难使用 我建议您研究一下 Javascript 框架之一 我们用原型与剧本 您可以在 Scriptacu
  • 如何在android中加载BufferedImage?

    我要加载BufferedImage在我的应用程序中 为此我正在使用ImageIO但我越来越java lang NoClassDefFoundError BufferedImage tgtImg loadImage ImageD2 jpg p
  • Google Apps 脚本仅在一次迭代后就停止了

    我在谷歌应用程序脚本中有一个小函数 必须在 for 循环中执行一些操作 即我有 3 行 其中包含一些值 对于每一行 我必须更新一张表 但不幸的是 我不明白为什么 但在仅仅一个之后循环程序停止了 并且没有return声明 这是代码 funct
  • 在 SwiftUI 中根据浅色或深色模式更改按钮样式修饰符

    我想设置自定义buttonStyle明暗模式按钮的修饰符 如何根据浅色或深色模式更改buttonStyle Modifier 我想为浅色和深色模式的按钮设置自定义修饰符 这是我的按钮代码 Button action print button