LinkedScrollView

类似腾讯新闻, 腾讯体育等众多app首页布局效果,使用方式简单,和tableView使用方式一致,只需实现对应的数据源方法即可。 你也可以想tableView一样通过代理获取交互状态, 并且效果多种多样,


类似效果展示(红色方框中的为标题,蓝色方框中的为内容)

中文教程

LinkedScrollView是一款处理上下联动的使用框架,适配iPhoneX, 并且支持屏幕旋转. 后期会不断增加新的功能.欢迎各位使用者提出建议和意见.

基本类介绍
  • HLLScrollTitleView.swift 标题view

  • HLLScrollContentView.swift 内容view

  • HLLScrollViewControllerDelegate.swift 处理标题和内容联动的代理

  • HLLScrollViewDataSource.swift 控件的数据源, 我们必须自己实现数据源方法

  • HLLScrollViewDelegate.swift 控件的代理, 选择实现来获取控件信息

  • HLLScrollView.swift 继承titleView 和 contentView的合成view, 使用此控件的时候主要使用它

  • HLLScrollViewController.swift 集成scrollView的控制器, 我们可以集成自这个类, 实现简单的上下联动的控制器

  • HLLTitleView: 自定义titleView中的没有标题的时候使用此类, 继承他然后自定义里面的控件即可

集成方法

要求:

iOS 9.0或以上

xCode 9.0或以上

swift 4.0 或以上

  • 手动集成

    将LinkedScrollView文件夹手动拖入工程即可
    
  • cocoaPods集成

        platform :ios, '9.0'target 'testMyPods' douse_frameworks!pod 'LinkedScroll'end
    
使用方法
  • 方式一:继承自HLLScrollViewController, 实现数据源方法即可, 使用方式可UITableViewController一致, 具体代码如下:

    import UIKitclass HomeViewController: HLLScrollViewController {override func viewDidLoad() {super.viewDidLoad()
    }//MARK: - 数据源方法***************************/// 标题数据源
    ///
    /// - Parameter scrollView:
    /// - Returns: 字符串数组, 用来显示标题override func scrollTitles(for scrollView: HLLScrollView?) -> [String] {return ["新闻房产", "体育", "房产财经", "房产", "动漫房产", "动漫","新闻房产", "体育",]}/// 内容数据源////// - Parameter scrollView:/// - Returns: 控制器数组, 用于显示内容override func scrollContentViewControllers(for scrollView: HLLScrollView?) -> [UIViewController] {var controllers = [UIViewController]()//这里简单用for循环创建控制器, 具体控制器根据实际情况创建for _ in 0 ..< 8 {controllers.append(NewsViewController())}return controllers}/// 内容控制器的父控制器, 用来添加自控制器,可以不实现, 默认为nil
    override func scrollContentParentViewController(for scrollView: HLLScrollView?) -> UIViewController? {return self;
    }//MARK: - 代理方法, 根据需要选择是否实现, 所有的方法都在HLLScrollViewDelegate里面***************************
    override func titleScrollViewDidScroll(titleScrollView: UIScrollView) {print(titleScrollView.contentOffset.x)
    }override func contentScrollViewDidScroll(contentScrollView: UIScrollView) {print(contentScrollView.contentOffset.x)
    }}
    
  • 方式二:初始化一个 HLLScrollView(继承自UIView),添加到控制的view中即可, 代码 如下:

    /// 懒加载一个HLLScrollView, 并设置相关属性
    private lazy var scrollView: HLLScrollView = {let sView = HLLScrollView()//数据源代理
    sView.dataSource = self
    sView.delegate = selfreturn sView
    }()override func viewDidLoad() {super.viewDidLoad()//添加HLLScrollView对象到控制器view中view.addSubview(scrollView)
    }override func viewDidLayoutSubviews() {super.viewDidLayoutSubviews()//在此设置HLLScrollView对象的frame, navi, tabbar, statusBar,的高度获取方法见extension文件scrollView.frame = CGRect(x: 0, y: self.navigateBarHeight() + UIApplication.getStatusBarHeight(), width: view.bounds.width, height: view.bounds.height - self.navigateBarHeight() - self.tabBarHeight() - UIApplication.getStatusBarHeight())
    }//然后实现数据源方法, 实现方式见方式一//根据需要实现代理方法, 实现方式见方式一
    
使用技巧

通过改变属性值可以自定义自己想要的样式, 具体属性如下:
* HLLScrollView属性

  • HLLScrollTitleView属性
  • isIndicatorLineHidden: 是否文字下方的指示线是否隐藏, 默认为false(不隐藏)


  • highlightTextColor: 文字高亮颜色, 指示线的颜色默认和高亮文字颜色一致也可以通过
    scrollTitleView.lineView.backgroundColor属性自行修改

  • normalTextColor: 文字普通颜色

  • titleView:整个标题视图, 是[HLLTitleView]类型

  • titleViewHeight: 标题视图的高度

  • lineHeight: 指示线的高度

  • textScaleRate:当前选中label放大的增量, 如果设为0.0则不缩放, 默认值为0.0, 不要设置太大, 值太大由于高度不够文字会显示不全

  • textFont:title字体大小, titleLabel的宽度会随着字体的变化而变化, 但是高度不会变化, 通过titleViewHeight属性设置适当的高度

  • lineView:指示线, 可以自定义指示线, 或者通过改变其属性定义自己的效果

  • rightView: titleView右边的视图, 比如可以定义一个按钮, 点击查看所有条目, 如下图中的加号

  • isMarkHiddenByTap: title的标记是否在点击之后消失, 如果为true那么标记视图在点击后会消失, 下图中红点就是标记

  • margin: 每title之间的间距

  • HLLScrollContentView属性
  • isPanToSwitchEnable: 是否允许左右滑动内容来切换标题标签, 默认为true
  • 通过属性组合得到的效果

让指示线的高度等于titleView的高度, 具体组合属性设置ruxia:

    //备注: sView就是HLLScrollView对象sView.titleViewHeight = 44sView.scrollTitleView.lineView.layer.cornerRadius = 16sView.scrollTitleView.lineHeight = 44sView.scrollTitleView.lineView.backgroundColor = UIColor.blue

  • 自定义titleView的方法(如果不设置自定义title, title里面只有一个label), 自定义的方式如下:

func scrollTitles(for scrollView: HLLScrollView?) -> [String] {
let titles = [“新闻”,”大家都在看”, “直播”, “体育”, “财经”, “房产”, “动漫”, “猜你感兴趣”,”大家都在看”, “直播”]
var ts = TitleView
//根据标题初始化titleView中的每一个title视图, 下面简单的使用for循环创建,可以根据实际需求创建
//TitleView 是每个title的自定义视图, 继承自HLLTitleView
for (index, _) in titles.enumerated() {
let tView = TitleView(frame: CGRect(x: 0, y: 0, width: 90, height: 40))
tView.isRightHidden = index % 2 == 0
ts.append(tView)
}
scrollView?.scrollTitleView.titleView = ts
return titles
}

  • 自定义rightView的方式如下:

let btn = UIButton(frame: CGRect(x: 0, y: 0, width: 40, height: 40))
btn.setImage(#imageLiteral(resourceName: “增加-4”), for: .normal)
btn.addTarget(self, action: #selector(btnClick), for: .touchUpInside)
//sView是HLLScrollView的实例
sView.scrollTitleView.rightView = btn

demo地址
联系方式
  • email: objc_china@163.com

iOS上下联动框架(Swift)相关推荐

  1. swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程

    swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 1.2.3  注册非免费苹果账号swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 免费的苹果账号在 ...

  2. Swift版iOS游戏框架Sprite Kit基础教程下册

    Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C  介绍:本教程是国内唯一的Swift版的Spritekit教程 ...

  3. iOS游戏框架Sprite Kit基础教程——Swift版上册

    iOS游戏框架Sprite Kit基础教程--Swift版上册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C  介绍:本教程是国内唯一的Swift版的Spritekit ...

  4. iOS游戏框架Sprite Kit基础教程第1章编写第一个Sprite Kit程序

    iOS游戏框架Sprite Kit基础教程第1章编写第一个Sprite Kit程序 程序是为了实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合.本章将以编写第一个Sprite Kit程序为 ...

  5. 详解OS X和iOS图像处理框架Core Image

     详解OS X和iOS图像处理框架Core Image width="22" height="16" src="http://hits.sinaj ...

  6. IOS网络框架的Alamofire5.4高版本网络工具封装

    IOS网络框架的Alamofire5.4高版本网络工具封装 网上一般的封装都是过期的swift写法,或者低版本的Alamofire,照搬照抄只会报错一大堆.令开发者很是头疼.特此公开最新的网络工具封装 ...

  7. 开发者注意!盘一盘 iOS 14 中 Swift 和 SwiftUI 的使用情况

    作者 | Alexandre Colucci 译者 | 弯月,责编 | 杨碧玉 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 以下为译文: 在2014年的全球开发 ...

  8. iOS开发之swift资料大全

    目录(?)[+] 版本:Swift github排名 https://github.com/trending,github搜索:https://github.com/search 主要工作说明:  1 ...

  9. 常用的iOS第三方框架

    转载自:https://github.com/Tim9Liu9/TimLiu-iOS 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与To ...

最新文章

  1. 【一个诡异的问题】用饿了么的自定义主题之后发现表格顶部的复选框checkbox错位了
  2. mongodb 运行状况,索引构建分析
  3. springMVC get请求及其请求地址写法
  4. 【正一专栏】老夫老妻了,你还会说我爱你吗?
  5. python 编程该看那些书籍_我用python5年后,我发现学python编程必看的三本书!
  6. Berttransformer
  7. Android Support Annotation Library使用详解
  8. 【lib.es5】ArrayBuffer、DataView 的TypeScript接口
  9. 显示计算机101代码,steam错误代码-101 解决steam错误代码-101的方法
  10. SAP BTE 增强 物料主数据变更
  11. 【统计学的学习方法论】
  12. 交通信号灯自动控制模拟指示系统
  13. vtk 显示效果设置
  14. 自上而下的因果关系:数学结构与观察者
  15. sqrt函数实现(神奇的算法)
  16. ODBC连接数据库详细说明
  17. 超级详细的PostgreSQL创建数据库操作并附带图文
  18. 计算机应用基础任务化教程135,在PowerPoint 2010中SmartArt图形的制作及技巧.doc
  19. aida64注册信息已损坏_AIDA64 Extreme(硬件检测)
  20. Excel打开CSV文档乱码解决办法

热门文章

  1. macOS上的汇编入门(四)——操作系统基础
  2. 图森宣布正式获颁加州路测牌照 无人驾驶迈向新台阶
  3. 如何绘制炫酷的韦恩图(薇恩图)Venn diagram
  4. SpringMvc简略运行流程
  5. 百度专网地图,助力中国联通智慧运营
  6. 【项目篇- 附件佐证材料可以放些什么?(十八种两千字总结建议)】创新创业竞赛项目计划书、挑战杯创业计划竞赛佐证材料
  7. 联想t168服务器安装系统,联想万全T168服务器板载Sata+raid系统设置图解.doc
  8. LInx环境(离线安装)centos7
  9. Symbian手机 如何取消桌面壁纸?
  10. xls的文件格式和扩展名不匹配