首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使自定义DisclosureGroup (下拉)在SwiftUI中?

如何使自定义DisclosureGroup (下拉)在SwiftUI中?
EN

Stack Overflow用户
提问于 2022-08-15 01:18:30
回答 2查看 454关注 0票数 0

我想要做一个自定义DisclosureGroup,它具有与默认DisclosureGroup相同的功能,但允许我更改颜色文本,甚至可以放置图像而不是字符串。

因为DisclosureGroup不允许我移除左边的蓝色箭头指示器,而且它有限制。

现在默认的DisclosureGroup是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct ContentView: View {
    @State private var revealDetails = false

    var body: some View {
        DisclosureGroup("Show Terms", isExpanded: $revealDetails) {
            Text("Long terms and conditions here long terms and conditions here long terms and conditions here long terms and conditions here long terms and conditions here long terms and conditions here.")
        }
    }
}

我想做这样的事:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct ContentView: View {
    
    @State private var isExpanded = false
    
    var body: some View {
        CustomDisclosureGroup(isExpanded: $isExpanded, actionOnClick: {
            isExpanded.toggle()
            print("do something else")
        }, prompt: {
            HStack {
               Text("this is a custom row")
                  .foregroundColor(Color.white)
               Spacer()
               Image("customArrow")
                  .resizable()
                  .frame(width: 12, height: 12)
            }
            .background(Color.blue)
        }, expandedView: {
            VStack {
                Text("this is also a custom view")
                Text("another one")
            }
            .background(Color.red)
        })
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-15 03:07:02

经过一些搜索和编码之后,我创建了这个结构,它满足了我的需要,并与SwiftUI中的默认SwiftUI非常相似。

下面是它的用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct ContentView: View {
    
    @State private var isExpanded = false
    @AppStorage("timesClicked") private var timesClicked = 0
    
    var body: some View {
        
        ScrollView {
            CustomDisclosureGroup(animation: .easeInOut(duration: 0.2), isExpanded: $isExpanded) {
                isExpanded.toggle()
                timesClicked += 1
            } prompt: {
                HStack(spacing: 0) {
                    Text("How to open an account in your application?")
                    Spacer()
                    Text("?")
                        .fontWeight(.bold)
                        .rotationEffect(isExpanded ? Angle(degrees: 180) : .zero)
                }
                .padding(.horizontal, 20)
            } expandedView: {
                Text("you can open an account by choosing between gmail or ICloud when opening the application")
                    .font(.system(size: 16, weight: .semibold, design: .monospaced))
            }
        }

    }
}

只要在项目中实现此结构,就可以在任何时候使用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct CustomDisclosureGroup<Prompt: View, ExpandedView: View>: View {
    
    @Binding var isExpanded: Bool

    var actionOnClick: () -> ()
    var animation: Animation?
    
    let prompt: Prompt
    let expandedView: ExpandedView
    
    init(animation: Animation?, isExpanded: Binding<Bool>, actionOnClick: @escaping () -> (), prompt: () -> Prompt, expandedView: () -> ExpandedView) {
        self.actionOnClick = actionOnClick
        self._isExpanded = isExpanded
        self.animation = animation
        self.prompt = prompt()
        self.expandedView = expandedView()
    }
    
    var body: some View {
        VStack(spacing: 0) {
            prompt
            
            if isExpanded{
                expandedView
            }
        }
        .clipped()
        .contentShape(Rectangle())
        .onTapGesture {
            withAnimation(animation) {
                actionOnClick()
            }
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2022-08-15 19:00:56

虽然DisclosureGroup没有为您提供定制它的完全灵活性,但您仍然可以做一些事情:

  • 如果您所需要的只是红色箭头而不是蓝色,您只需为其设置.tint(.red)即可。
  • 如果您需要标签中的文本以外的其他信息,您实际上可以使用:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- [`init(content: () -> Content, label: () -> Label)`](https://developer.apple.com/documentation/swiftui/disclosuregroup/init(content:label:%29)
- [`init(isExpanded: Binding<Bool>, content: () -> Content, label: () -> Label)`](https://developer.apple.com/documentation/swiftui/disclosuregroup/init(isexpanded:content:label:%29)

对于更复杂的自定义,如果您正在iOS 16或更高版本上运行,请考虑采用DisclosureGroupStyle

  • 示例: struct CustomDisclosureGroupStyle:DisclosureGroupStyle { let按钮: Label (配置:配置) -> ->{ HStack { configuration.label Spacer()按钮->?90 :0)}.contentShape(矩形()) .onTapGesture { withAnimation {configuration.isExpanded.toggle() }如果configuration.isExpanded { configuration.content .padding(.leading,( 30) .disclosureGroupStyle(self) }} ContentView:.disclosureGroupStyle{ var body: some { DisclosureGroup {//…}ContentView文本(“ok”)}}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73358999

复制
相关文章
干货 | 石化产品机器学习价格模型开发和SEI石化产品价格分析体系构建
我们的报告将分为六个部分,第一部分是研究背景与内容。受疫情影响以来,石化行业市场日趋饱和,竞争激烈,同时利润也受到压缩,大部分石化产业都需要转型开拓新市场,但同时又难以获取一些小品种化工品价格。所以我们希望通过机器学习方法实现敏锐捕捉市场化工品价格变化趋势,同时能够推算小品种化工品价格的目标。长此以往,我们希望能够建立属于我们自己的化工品价格体系,为石化行业提供新的机遇。
数据派THU
2023/08/08
3060
干货 | 石化产品机器学习价格模型开发和SEI石化产品价格分析体系构建
产品经理需要会 SQL 吗?会 SQL 对产品有多大帮助?
1.当我们要查数据时,技术人手不够,永远在排期。不如要了只读权限自己干,取数分析一条龙。
蒋川
2021/08/04
2.3K0
产品经理需要会 SQL 吗?会 SQL 对产品有多大帮助?
如何使用Python构建价格追踪器进行价格追踪
学习Python自动化的一个好办法就是构建一个价格追踪器。由于这项任务生成的脚本可以立即投入使用,所以对于初学者来说尤为方便。
用户7850017
2022/12/09
6.1K0
如何使用Python构建价格追踪器进行价格追踪
案例|产品介绍(喜力啤酒价格构成图)
今天要跟大家分享的是产品介绍的一般思路! 产品介绍可能是我们日常做演示文稿需求最频繁的任务之一。 它见诸于课堂演示、新品发布会、业绩报告会以及融资路演的大屏幕上,可是我们日常见到的最多的仍然是仅仅数
数据小磨坊
2018/04/10
1.5K0
案例|产品介绍(喜力啤酒价格构成图)
DNSPod 618直播间产品价格清单,来了!
倒计时7天! DNSPod618直播下周五就要开播啦! 你预约直播了吗? 搞促销 我们是认真的 全部产品都给到了直播专享最低价 服务器 解析 证书 网站建设 通通1元秒杀! 域名免费送! 数量有限 先到先得 赶紧预约直播吧! ↓↓ 详细产品清单 ↓↓ SMB 腾讯云中小企业产品中心     腾讯云中小企业产品中心(简称SMB),作为腾讯云体系中唯一专业服务于8000万中小企业的业务线,致力于为中小微企业提供全面完善贴心的数字化解决方案。产品线覆盖了企业客户从创业起步期、规范治理期、规模化增
腾讯云DNSPod团队
2021/06/11
7440
如何对产品运营情况进行监控
http://groups.google.com/group/dev4server/browse_thread/thread/8a86bb49a561f312
王亚昌
2018/08/03
1.4K0
干货!产品经理职责:如何对产品进行数据分析?
1、Query 这是一切搜索或者类似产品的质量提升源泉没有之一 //至少我是这么认为的。 看了Query你才能知道用户真的在你这里干什么,于是就会理解了“访谈里都是骗人的……”。 举个栗子,访谈用户十个里面9.9个会义正言辞的告诉你,自己使用翻译的时候是多么正经的看论文啦学英语,跟外国友人交流啦看美剧。看看query你就会发现各种杂七杂八少儿不宜的都冒出来了。 Query最简单的一个使用方法就是选取query=>分析用户目的=>评价结果质量,然后针对质量问题进行进一步分析,之后给出解决方案。解决方案后的事情
CDA数据分析师
2018/02/11
1K0
「SQL面试题库」 No_72 指定日期的产品价格
题目介绍: 指定日期的产品价格 product-price-at-a-given-date
不吃西红柿
2023/05/23
2050
关于Elasticsearch Service价格下调和部分折扣调整通知
Elasticsearch Service产品于2020年4月10日进行了价格下调和部分购买折扣调整,具体如下:
腾讯云大数据
2020/04/15
3K2
关于Elasticsearch Service价格下调和部分折扣调整通知
R语言ARMA-GARCH模型金融产品价格实证分析黄金价格时间序列
研究黄金价格的动态演变过程至关重要。文中以黄金交易市场下午定盘价格为基础,帮助客户利用时间序列的相关理论,建立了黄金价格的ARMA-GARCH模型,并对数据进行了实证分析,其结果非常接近。利用该模型可动态刻画黄金价格数据的生成过程,也可帮助黄金产品投资者和生产者做出更加灵活、科学的决策。
拓端
2023/06/05
4680
LeetCode MySQL 1164. 指定日期的产品价格 *
写一段 SQL来查找在 2019-08-16 时全部产品的价格, 假设所有产品在修改前的价格都是 10。
Michael阿明
2021/02/19
8290
图解LeetCode——1475. 商品折扣后的最终价格(难度:简单)
给你一个数组 prices ,其中 prices[i] 是商店里第 i 件商品的价格。
爪哇缪斯
2023/05/10
2410
图解LeetCode——1475. 商品折扣后的最终价格(难度:简单)
使用 Python 按行和按列对矩阵进行排序
假设我们采用了一个输入的 MxM 矩阵。我们现在将使用嵌套的 for 循环对给定的输入矩阵进行逐行和按列排序。
很酷的站长
2023/02/22
6.1K0
使用 Python 按行和按列对矩阵进行排序
联想产品的国内外价格为什么会有差别? | 拔刺
在这个用过即弃的时代,不要让你的求知欲过期。 今日拔刺: 1、联想产品的国内国外价格为什么会有差别? 2、为什么美国怕华为而不怕三星? 3、目前新能源汽车存在的突出问题是什么? 本文 | 1723字
镁客网
2018/06/05
8460
点击加载更多

相似问题

按价格对产品进行排序

11

Magento :按价格对捆绑产品进行排序

10

按库存和价格对产品进行排序woocommerce

13

sql查询,获取有折扣的当季价格产品

10

如何在App购买中按价格对产品进行排序?

63
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文