颜值即正义,使用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 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
相关文章
|
iOS开发
SwiftUI极简教程13:NavigationView导航栏使用
SwiftUI极简教程13:NavigationView导航栏使用
2440 2
SwiftUI极简教程13:NavigationView导航栏使用
|
前端开发 开发工具 iOS开发
初识MVVM·关于启动页、引导页、登录页的设计细节和交互逻辑(1)
初识MVVM·关于启动页、引导页、登录页的设计细节和交互逻辑
543 0
|
程序员 索引
SwiftUI极简教程18:SwipeCard卡片滑动效果的使用(上)
SwiftUI极简教程18:SwipeCard卡片滑动效果的使用(上)
1382 0
SwiftUI极简教程18:SwipeCard卡片滑动效果的使用(上)
|
12月前
|
移动开发 网络协议 小程序
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v9.1版已发布
RainbowChat是一套基于开源IM聊天框架 MobileIMSDK 的产品级移动端IM系统。RainbowChat源于真实运营的产品,解决了大量的屏幕适配、细节优化、机器兼容问题
255 5
|
存储 Swift
大师学SwiftUI第18章Part3 - 自定义视频播放器
录制和播放视频对用户来说和拍照、显示图片一样重要。和图片一样,Apple框架中内置了播放视频和创建自定义播放器的工具。
552 0
使用SwiftUI搭建一个简易书籍阅读App,做一个爱读书的人~
使用SwiftUI搭建一个简易书籍阅读App,做一个爱读书的人~
297 0
使用SwiftUI搭建一个简易书籍阅读App,做一个爱读书的人~
|
iOS开发
加载中,加载中......使用SwiftUI设计2种Loading动画
加载中,加载中......使用SwiftUI设计2种Loading动画
698 0
|
前端开发 iOS开发
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)(1)
实战编程·使用SwiftUI从0到1完成一款iOS笔记App(三)
271 0
|
机器学习/深度学习 开发者 iOS开发
快速上手·10分钟完成一个引导页界面
快速上手·10分钟完成一个引导页界面
539 0
|
存储 测试技术 开发工具
基础了解·创建第一个SwiftUI项目
基础了解·创建第一个SwiftUI项目
332 0