颜值即正义,使用SwiftUI搭建个人信息、账号绑定、通用设置详情页

简介: 颜值即正义,使用SwiftUI搭建个人信息、账号绑定、通用设置详情页

颜值即正义,使用SwiftUI搭建个人信息、账号绑定、通用设置详情页


个人信息页

个人信息页承载的功能是帮助用户修改和查看个人的基本信息,包含但不限于用户头像用户昵称用户ID个人简介,针对于不同的业务场景,可以补充职位公司等信息。

以下图个人信息详情页为例:

image.png

我们从设置的首页,点击个人信息栏,就可以跳转进入个人详细详情页。最基础的页面跳转方法,我们可以使用基于NavigationView的页面跳转方法。

但首先,我们需要先完成详情页的内容。示例:

// MARK: 个人资料详情页
struct PersonalDataView: View {
    var body: some View {
        ZStack {
            Color(red: 246 / 255, green: 246 / 255, blue: 246 / 255).edgesIgnoringSafeArea(.all)
            VStack(spacing: 20) {
                Image("me")
                    .resizable()
                    .aspectRatio(contentMode: .fit)
                    .frame(width: 100)
                    .clipShape(Circle())
                    .overlay(Circle().stroke(Color(.systemGray5), lineWidth: 1))
                Text("修改头像")
                    .font(.system(size: 14))
                    .foregroundColor(.gray)
                Form {
                    Section {
                        listItemView(itemImage: "", itemName: "用户名", itemContent: "文如秋雨")
                        listItemView(itemImage: "", itemName: "掘金ID", itemContent: "3897092103223517")
                        listItemView(itemImage: "", itemName: "职位", itemContent: "高级产品经理")
                        listItemView(itemImage: "", itemName: "公司", itemContent: "未知")
                        listItemView(itemImage: "", itemName: "简介", itemContent: "什么也没留下")
                    }
                }
            }.padding(.top, 40)
        }.navigationBarTitle("个人信息", displayMode: .inline)
    }
}

一般来说,如果我们需要设计一个新的页面,通常使用结构体创建一个新的视图。这里,我们创建了一个新的视图PersonalDataView来承载内容。

页面样式内容包括使用ZStack将页面包裹填充背景颜色,然后使用Image图片和Text构建修改头像样式,使用Form表单和listItemView栏目结构构建详情页的可修改栏目。这里由于后续我们也可以使用NavigationView跳转方法,因此先不加指示器。

最后我们回到ContentView视图中,完善跳转方法。示例:

NavigationLink(destination: PersonalDataView()) {
    mineMessageView
}

我们预览下效果:

image.png

账号绑定页

账号绑定页面承载着该App关联绑定的用户账号信息,包含注册的账号(一般为手机号、邮箱)、登录密码,以及第三方授权的社交账号、社区帐号等。

以下图账号绑定详情页为例:

image.png

以上图为例,我们发现账号绑定详情页的结构和Form表单的结构,这里我们可以采用和设置页面相同的页面布局结构,示例:

// MARK: 绑定账号详情页
struct AccountBindingView: View {
    @State var isWechatBingding = true
    @State var isGitHubBingding = false
    @State var isWeiboBingding = false
    var body: some View {
        ZStack {
            Color(red: 246 / 255, green: 246 / 255, blue: 246 / 255).edgesIgnoringSafeArea(.all)
            Form {
                Section {
                    listItemView(itemImage: "", itemName: "手机号", itemContent: "1666666666")
                    listItemView(itemImage: "", itemName: "修改密码", itemContent: "")
                }
                Section(header: Text("第三方账号")) {
                    Toggle(isOn: $isWechatBingding) {
                        Text("微信")
                    }
                    Toggle(isOn: $isGitHubBingding) {
                        Text("GitHub")
                    }
                    Toggle(isOn: $isWeiboBingding) {
                        Text("新浪微博")
                    }
                }.padding(.vertical, 5)
                Section {
                    cancelAccount
                }
            }.navigationBarTitle("账号绑定", displayMode: .inline)
        }
    }
    // 注销账号
    private var cancelAccount: some View {
        Button(action: {
        }) {
            Text("注销账号")
                .font(.system(size: 17))
                .frame(minWidth: 0, maxWidth: .infinity, minHeight: 30, maxHeight: 30)
                .foregroundColor(.red)
                .cornerRadius(8)
                .padding(.vertical, 5)
        }
    }
}

上述代码中,我们依旧使用ZStack层叠覆盖一个背景颜色,然后使用Form表单和Section段落构建样式。

第三方账号绑定由于我们使用Toggle开关的方式,我们需要提前声明3个变量isWechatBingding绑定微信、isGitHubBingding绑定GitHubisWeiboBingding绑定微博。

最后我们和退出登录按钮一样构建了cancelAccount注销账号按钮。

我们回到ContentView视图中,完善跳转方法。示例:

NavigationLink(destination: PersonalDataView()) {
    listItemView(itemImage: "lock", itemName: "账号绑定", itemContent: "已绑定")
}

我们预览下效果:

通用设置面

原有的掘金App存在一些难以理解的操作功能,示例:基础版掘金个性化推荐设置推送通知设置。用户对于这些设置功能学习成本较高,以及存在由于功能分散而导致找不到设置操作等问题。

这,不够优雅。

这里提供的产品方案是将功能设置操作统归为一个通用设置页面。示例:

image.png

页面内容也比较简单,我们可以使用Form表单、Section段落、Toggle开关来构建样式。示例:

// MARK: 通用设置详情页
struct GeneralSettingView: View {
    @State var isFullSelected = true
    @State var isIndividuationSelected = true
    @State var isChoicenessSelected = true
    @State var isInformationSelected = true
    var body: some View {
        ZStack {
            Color(red: 246 / 255, green: 246 / 255, blue: 246 / 255).edgesIgnoringSafeArea(.all)
            Form {
                Section {
                    Toggle(isOn: $isFullSelected) {
                        VStack(alignment: .leading, spacing: 5) {
                            Text("完整版功能")
                                .font(.system(size: 17))
                                .foregroundColor(.black)
                            Text("开启后可享有完整功能,建议开启")
                                .font(.system(size: 14))
                                .foregroundColor(.gray)
                        }
                    }
                    Toggle(isOn: $isIndividuationSelected) {
                        VStack(alignment: .leading, spacing: 5) {
                            Text("个性化推荐")
                                .font(.system(size: 17))
                                .foregroundColor(.black)
                            Text("开启后将根据您的喜好进行内容推荐")
                                .font(.system(size: 14))
                                .foregroundColor(.gray)
                        }
                    }
                    Toggle(isOn: $isChoicenessSelected) {
                        VStack(alignment: .leading, spacing: 5) {
                            Text("精选内容推送")
                                .font(.system(size: 17))
                                .foregroundColor(.black)
                            Text("开启后将享有精选内容推荐")
                                .font(.system(size: 14))
                                .foregroundColor(.gray)
                        }
                    }
                    Toggle(isOn: $isInformationSelected) {
                        VStack(alignment: .leading, spacing: 5) {
                            Text("消息推送")
                                .font(.system(size: 17))
                                .foregroundColor(.black)
                            Text("关闭后将无法收到及时通知,建议开启")
                                .font(.system(size: 14))
                                .foregroundColor(.gray)
                        }
                    }
                }.padding(.vertical, 5)
            }.navigationBarTitle("通用设置", displayMode: .inline)
        }
    }
}

最后我们回到ContentView视图中,完善跳转方法。示例:

NavigationLink(destination: PersonalDataView()) {
    listItemView(itemImage: "gear.circle", itemName: "通用设置", itemContent: "")
}

我们预览下效果:

恭喜你,完成了本章的全部内容!

快来动手试试吧。

相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
阿里云实时数仓实战 - 用户行为数仓搭建
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3 )前置知识要求:熟练掌握 SQL 语法熟悉 Linux 命令,对 Hadoop 大数据体系有一定的了解   课程大纲 第一章 了解数据仓库概念 初步了解数据仓库是干什么的 第二章 按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章 数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章 采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
相关文章
|
存储 人机交互 API
8个SwiftUI的小技巧让隔壁同事两眼放光,直呼太卷了
在日常的SwiftUI开发过程中,常常会出现一些“小BUG”让我们措手不及、头顶发凉。这些问题可能是由于我们自己不熟悉SwiftUI语法导致的,也有是SwiftUI本身自带的缺陷,毕竟是一个新兴语言。 那么本章就介绍一些SwiftUI开发的小技巧,帮助我们避避那些让我们头秃的坑。
1655 0
8个SwiftUI的小技巧让隔壁同事两眼放光,直呼太卷了
|
程序员 索引
SwiftUI极简教程18:SwipeCard卡片滑动效果的使用(上)
SwiftUI极简教程18:SwipeCard卡片滑动效果的使用(上)
1651 0
SwiftUI极简教程18:SwipeCard卡片滑动效果的使用(上)
|
JavaScript
Vue~在线预览doc、docx、pdf、img文件
Vue~在线预览doc、docx、pdf、img文件
8361 0
|
Swift
swift(MJRefresh框架)的使用
swift(MJRefresh框架)的使用
1281 0
|
iOS开发
iOS 开发之几个 Demo 分享网站
OSChina 前往 OSChina Code4App 前往 Code4App CocoaChina 前往 CocoaChina 码云 前往码云
4275 0
|
缓存 Linux 开发者
Avalonia开源控件库强力推荐-Semi.Avalonia
【11月更文挑战第3天】Semi.Avalonia 是一个基于 Avalonia 的开源控件库,提供了丰富的自定义控件和扩展功能。它支持多种样式按钮、高级输入控件和灵活的布局容器,简化了属性设置,并提供了详细的文档支持。Semi.Avalonia 还支持多种内置主题和自定义主题,具备高效的渲染机制和合理的资源管理,适用于跨平台桌面应用程序开发。
1271 2
|
存储 监控 网络协议
Linux日志分析工具之AWStats
AWStats是一款功能强大且功能强大的免费工具,可以图形方式生成高级Web,流媒体,ftp或邮件服务器统计信息。此日志分析器用作CGI或命令行, 并在几个图形网页中显示您的日志包含的所有可能信息。
1128 0
Linux日志分析工具之AWStats
|
域名解析 网络协议 关系型数据库
阿里云轻量服务器安装WordPress网站教程
阿里云轻量服务器安装WordPress网站教程,阿里云轻量应用服务器镜像可选WordPress应用,应用镜像可以自动安装WordPress程序及WP所依赖的Web安装环境,轻量服务器网来详细说下轻量服务器选择WordPress应用镜像创建成功后的操作流程使用方法:
1345 0
|
Java uml
UML之组件图(构件图)
UML之组件图(构件图)
1335 0
|
算法 安全 Linux
Git 拉取项目小技巧之切换分支error: The following untracked working tree files would be overwritten by checkout:
Git 拉取项目小技巧之切换分支error: The following untracked working tree files would be overwritten by checkout:
1117 0
Git 拉取项目小技巧之切换分支error: The following untracked working tree files would be overwritten by checkout:

热门文章

最新文章