如果稀土掘金App要更新“发布文章”功能,那么入口会设置在哪里?

简介: 如果稀土掘金App要更新“发布文章”功能,那么入口会设置在哪里?

如果稀土掘金App要更新“发布文章”功能,那么入口会设置在哪里?


项目背景

稀土掘金App一直以来都缺少在客户端发布文章的功能,可能原因如下:

一是由于基础功能(示例:会员、活动等)还在完善,优先级较高;

二是由于在移动端实现发布文章功能的开发难度较大、开发周期较长;

三是产品规划中稀土掘金App的发展方向有所侧重,新增的每一项功能都需要经过内部评审层层管控。

如果稀土掘金App要更新发布文章功能,鉴于当前的App设计风格产品结构,入口放在哪里会比较合适呢?

传统的资讯社区类App,新增发布内容的入口通过可以分为3大类:顶部导航入口主页面悬浮入口底部导航入口

那么本章中,我们就来使用SwiftUI实现下几个入口的设计吧~

项目搭建

首先,创建一个新的SwiftUI项目,命名为WritingView

image.png

顶部导航入口

顶部导航入口在头条系的产品中较为常见,示例:今日头条。

这种产品设计方式偏向于让App以内容资讯查阅为重点规划方向,在本身资讯内容较为完善的情况下,强化资讯资讯流,而弱化对于内容共建的产品侧重。

让用户偏向于浏览资讯,而把提供资讯内容的创作者作为有主动意识形态的群体,因此在产品设计上,发布文章功能放置在首页右上角。

功能实现上,我们可以使用NavigationView导航来实现这个功能样式,示例:

struct ContentView: View {
    var body: some View {
        NavigationView {
            Text("点击右上角发布文章")
                .padding()
                .navigationBarTitle("首页", displayMode: .inline)
                .navigationBarItems(trailing: publishBtnView)
        }
    }
    // 顶部导航入口
    private var publishBtnView: some View {
        Button(action: {
        }) {
            Image(systemName: "plus.circle.fill")
                .foregroundColor(.blue)
        }
    }
}

上述代码中,我们绘制了一个发布按钮publishBtnView,然后使用navigationBarTitle修饰符设置首页的标题,最后将创建好的publishBtnView视图使用navigationBarItems修饰符放在页面右上角。

image.png

主页悬浮入口

主页悬浮入口是一种悬浮在页面右下角,在底部导航之上的一种入口设置方式。

常见于社区、圈子、问答、购物类App中,主要用于快速编辑分享基于当前页面内容的信息,示例:稀土掘金“沸点”功能。

偏向于引导用户就话题或者内容分享个人见解,构建社区氛围。

功能实现上,我们可以使用ZStack层叠视图,将按钮位置放在页面右下角,示例:

// 悬浮入口
private var suspendBtnView: some View {
    VStack {
        Spacer()
        HStack {
            Spacer()
            Button(action: {
            }) {
                Image(systemName: "plus.circle.fill")
                    .font(.system(size: 60))
                    .foregroundColor(.blue)
            }
        }
    }
    .padding(.bottom, 32)
    .padding(.trailing, 32)
}

上述代码中,我们创建了一个按钮视图suspendBtnView,使用VStack纵向视图和HStack横向视图,将按钮放置在了右下角。

最后我们还需要使用ZStack层叠视图,将suspendBtnView视图和主页层叠在一起,示例:

var body: some View {
    NavigationView {
        ZStack {
            Text("点击右下角发布文章")
                .padding()
            suspendBtnView
        }
        .navigationBarTitle("首页", displayMode: .inline)
    }
}

image.png

底部导航入口

最后一种方式是底部导航入口的方式,常规的底部菜单最多不超过5个入口,排除通用的“首页”和“我的”入口,系统掘金App还有“沸点”、“发现”、“课程”栏目。

当前“首页”承载着推荐文章信息流,发布文章功能当前最有可能安置在主页右上角,其次安排到主页右下角悬浮窗口。

但对于其他功能页面,“发现”页面承载的内容过多,则多于其他栏目内容重复,如果在“发现”页面,技术团队推荐活动推荐等功能与其他栏目相融合,那么可以将“发布文章”操作替代原有的“发现”入口。

当然,这只是个人浅显的建议。

回归主题,在底部导航我们也可以创建“发布文章”的按钮,示例:

// 底部导航入口
struct TabberView: View {
    @Binding var selectedIndex: Int
    var body: some View {
        HStack {
            // 首页
            Button(action: {
                self.selectedIndex = 0
            }) {
                VStack(spacing: 10) {
                    Image(systemName: "house.fill")
                        .font(.system(size: 24))
                    Text("首页")
                        .font(.system(size: 14))
                }
            }.foregroundColor((self.selectedIndex == 0) ? .blue : .gray)
            Spacer(minLength: 0)
            // 沸点
            Button(action: {
                self.selectedIndex = 1
            }) {
                VStack(spacing: 10) {
                    Image(systemName: "flame.fill")
                        .font(.system(size: 24))
                    Text("沸点")
                        .font(.system(size: 14))
                }
            }.foregroundColor((self.selectedIndex == 1) ? .blue : .gray)
            Spacer(minLength: 0)
            // 发布文章
            Button(action: {
                self.selectedIndex = 2
            }) {
                Image(systemName: "plus.circle.fill")
                    .font(.system(size: 48))
            }.foregroundColor(.blue)
            Spacer(minLength: 0)
            // 课程
            Button(action: {
                self.selectedIndex = 3
            }) {
                VStack(spacing: 10) {
                    Image(systemName: "book.closed.fill")
                        .font(.system(size: 24))
                    Text("课程")
                        .font(.system(size: 14))
                }
            }.foregroundColor((self.selectedIndex == 3) ? .blue : .gray)
            Spacer(minLength: 0)
            // 我的
            Button(action: {
                self.selectedIndex = 4
            }) {
                VStack(spacing: 10) {
                    Image(systemName: "person.fill")
                        .font(.system(size: 24))
                    Text("我的")
                        .font(.system(size: 14))
                }
            }.foregroundColor((self.selectedIndex == 4) ? .blue : .gray)
        }.padding(.horizontal, 35)
    }
}

上述代码中,我们创建了一个新视图TabberView,然后声明了一个变量selectedIndex,用来判断当前点击的是哪一个栏目。

样式部分,我们创建了5个按钮,设置了按钮的颜色和尺寸,除了“发布文章”按钮外,其他按钮都跟随selectedIndex变量切换颜色,用于辨别点击的是哪一个按钮。

然后我们在ContentView上也需要使用@State声明selectedIndex变量,做双向绑定。示例:

@State var selectedIndex: Int = 0

最后在ContentView视图上构建样式,示例:

VStack {
    Spacer()
    TabberView(selectedIndex: $selectedIndex)
}

image.png

小结

如果稀土掘金App要更新发布文章功能,入口无非就是以上3种其中一种。当然要实现在客户端写文章并且发布,功能、交互、逻辑没有那么简单,在此只是因为看到群里聊天话题就顺手写了篇文章,也算是一种总结和学习。

至于最终使用哪一种方式,好与不好,也欢迎大家留下宝贵的建议~

快来动手试试吧。


相关文章
|
10月前
|
小程序 视频直播 数据安全/隐私保护
如何在1v1视频直播交友APP中实现防录屏防截屏功能?
婚恋交友市场快速增长,1v1社交应用海外投放增86.49%,中东、东南亚及北美需求旺盛。用户偏好私密高效交流,国内“云相亲”兴起。开发需合规备案、实名认证,并防范诈骗。本文详解原生APP防录屏技术:Android通过MediaProjection检测,iOS监听UIScreen状态,结合动态水印、远程销毁等增强防护,平衡体验与安全。
|
10月前
|
JavaScript API 开发工具
如何在原生App中调用Uniapp的原生功能?
如何在原生App中调用Uniapp的原生功能?
1118 139
|
10月前
|
存储 自然语言处理 算法
参照Yalla、Hawa等主流APP核心功能,开发一款受欢迎的海外语聊需要从哪些方面入手
海外语聊APP开发需结合Yalla、Hawa等主流产品,聚焦多语言支持、实时音视频、社交互动与安全合规。兼顾技术架构、本地化运营与法律风险,避免劣质成品代码,平衡创新与成本,打造差异化出海产品。(239字)
|
11月前
|
移动开发 小程序 Android开发
基于 uni-app 开发的废品回收类多端应用功能与界面说明
本文将对一款基于 uni-app 开发的废品回收类多端应用,从多端支持范围、核心功能模块及部分界面展示进行客观说明,相关资源信息也将一并呈现。
326 0
|
存储 Java PHP
轻量化短视频电商直播带货APP源码全解析:核心功能与设计流程​
在电商直播热潮下,开发专属直播带货APP成为抢占市场关键。本文详解原生开发轻量化APP的核心功能与全流程设计,涵盖用户登录、商品浏览、直播互动、购物车、订单及售后功能,并介绍安卓端Java、苹果端Object-C、后台PHP的技术实现,助力打造高效优质的直播电商平台。
|
存储 移动开发 监控
App Trace功能实战:一键拉起、快速安装与免提写邀请码的应用实践
App Trace系统通过一键拉起、快速安装和免提写邀请码三大功能,显著提升用户转化率、安装成功率和邀请注册率。结合深度技术实现与优化,助力公司用户增长,成为移动端核心基础设施。
|
数据库
《仿盒马》app开发技术分享-- 回收订单页功能完善(45)
上一节我们实现了订单的待取件、已取消状态展示,并且成功实现了修改订单状态后的列表刷新,实现了云端数据的修改,这一节我们来实现订单页剩下的两个板块的业务逻辑,分别是运输中、已完成状态下的列表展示以及订单状态的修改
231 1
《仿盒马》app开发技术分享-- 扫一扫功能(35)
随着app的逐渐完善,我们现在需要在细节处做更多的打磨,在首页我们添加了很多静态的按钮和组件,现在我们开始对这些组件进行功能的添加,这次首先实现的是首页头部的扫一扫功能,扫一扫我们实现扫码后跳转商品详情页
252 0
|
存储 数据库
《仿盒马》app开发技术分享-- 购物车功能完善(14)
上一节我们实现了购物车商品列表的状态切换,已添加商品数量的增减,已添加商品滑动删除,已添加商品在选中情况下的价格计算。这一节我们在这些功能的基础上实现云端记录,因为我们现在只有数据的查询是从云端获取的,其他的操作虽然都实现了相对应的功能,但是当我们操作完,关闭app,再打开不会有对应的记录,有的同学可能会说,那我们把数据用首选项或者数据库的形式存储就可以了吧? 那如果我更换了另一个设备那这些添加的数据是不是就又不能使用了?所以我们的每个操作,最好都是提交到云端,这样我们在其他设备,在退出应用,切换账号这些情况下都能很好的保存我们操作后的购物车状态。
206 0
|
前端开发
《仿盒马》app开发技术分享-- 购物车基础功能实现(13)
上一节我们实现了加入购物车和购物车列表的简单展示。对一个电商类的应用来说,这很显然是不够的,我们的购物车内容应该更加的丰富,他需要用户能自主的去选择想要结算的商品,删除一些不需要的商品,或者取消掉一些本次不结算的商品,同时根据选择的不同,我们需要把相对应的价格和选择的数量等信息传递给用户,帮助用户节省更多的时间。
253 0

热门文章

最新文章