说明
首先声明,今日头条是我经常用的 app 之一,模仿今日头条也是因为感兴趣,代码仅用于学习交流。对于项目中的数据接口都是通过 Charles 抓包获得,基本每个界面都是有数据请求,不会抓包的朋友可以看我 这一篇文章。
项目中有的地方代码写的不是很简洁,毕竟自己能力有限,对 Swift 使用不是很熟练,还请各位朋友不喜勿喷。下面有项目的完整源码,喜欢的朋友可以下载下来,如果您感觉我写的代码对您有所帮助,还请在 github 给个 star,非常感谢您的支持!~
对于代码中出现的问题,可以及时联系我,我会继续修改。
github 地址
CodeData 地址
环境设置
项目环境
- Xcode 9.2(低于这个版本会报错)。
- Swift 4
- iOS 11.0
使用 cocoaPods 管理第三方库, 如果电脑没有安装 cocoapods,请先安装 cocoapods。安装方式可参考:最新版 CocoaPods 的安装流程
项目中使用到的第三方库
- SnapKit: 布局
- Kingfisher: 缓存图片
- SVProgressHUD:提示框
- FDFullscreenPopGesture:侧滑
- Alamofire :网络请求
- SwiftyJSON:解析 json
- MJRefresh: 上拉刷新和下拉刷新
实现的功能
- 获取今日头条的接口
- 完成首页的布局和数据的显示
- 实现首页顶部导航栏滚动
- 新闻详情界面简单实现
- 点击屏蔽按钮,弹出屏蔽视图(坐标有一些问题)
- 完成视频界面顶部导航栏滚动
- 完成视频界面布局和数据获取
- 用户界面简单实现
- 完成关注界面布局和数据的获取
- 完成关注界面,添加关注功能
- 完成搜索功能
- 完成个人界面的布局
- 完成设置界面的布局
- 完成离线下载界面布局
- 活动界面简单实现
- 登录界面的简单实现
- 启动界面的简单实现
数据请求
今日头条的接口文件请看: news.json,需要提前安装 postman,然后把该文件导入到 postman 进行查看,可以打开谷歌浏览器,找到扩展程序,添加新的扩展,搜索 postman。
下载地址请看 postman,下载完成后,直接拖入到谷歌浏览器的扩展程序界面即可。
数据请求的具体方式,请看 YMNetworkTool.swift。
首页
YMHomeViewController.md
1.首先,首页的状态栏的颜色是白色,所以调用了下面的方法:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
但是,经过测试,上面的代码不起作用,对于 YMMineViewController.swift
上面的代码是起作用的。
唯一的区别是就是在 YMMineViewController.swift
中隐藏了导航条。所以经过查阅资料,得到下面的结论:
1.不管是调用了系统的
UINavigationController
还是使用自己继承自UINavigationController
,如果navigationBar
没有被隐藏的话,那么导航控制器的rootController
以及它push
的控制器的preferredStatusBarStyle()
方法都不会被调用。
2.如果在当前控制器手动设置了navagationBar
的barStyle
为.Black
或者.Default
或者使用下面的代码手动设置:
// 方式1
navigationController?.setNavigationBarHidden(true, animated: false)
// 方式2
navigationController?.navigationBarHidden = true
那么 preferredStatusBarStyle()
就会被正常调用了。
还有一点关于隐藏导航栏的注意点请看 YMMineViewController.swift。