概述 最近有一个需求,类似今日头条顶部的菜单栏。唯一区别是需要带可移动的下划线。网上查找资料,发现解决方案大部分是用UIScrollView实现。下方VC控制用UICollectionView。...使用ScrollView的话就比较方便了,计算滑动距离和屏幕宽的比例,让下划线跟着滑即可。...在collectionView中,滑动cell的时候其实只是offset在变,cell的frame其实是不变的,collectionView其实也是个ScrollView,cell是加在scrollView...解决方案是,将cell的坐标转化到collectionView上,然后让下划线的中心点和cell在collectionView上中心点保持一致 if let currentCell = collectionView.cellForItem...初始化方法修改后记得在ScrollPageView中修改自定义VC的初始化。
UIScrollView 恐怕是所有 App 都绕不过去的类——尤其是它的子类 UITableView 和 UICollectionView。...如何定制不同 Cell 的 UI、如何与用户交互、如何与服务器端数据同步、如何在滑动时最大限度保证界面的流畅,这些都是考察的要点,是一个 iOS 工程师必备的基本技能。...比如具体 item 的尺寸大小, item 之间的间距,header 和 footer 的大小和间距,以及 UICollectionView 的滚动方向。...一般为了用户体验,我们会引入 navigationController,然后在导航栏的右上角添加 edit 按钮来让用户在普通和编辑模式中切换。 6....例如用惰性加载只处理用户想看到的内容,或是用 ASDK 进行智能预加载。这样可以进一步提高用户体验,并使整个滑动的性能效率最大化。 10.如何用 UICollectionView 实现瀑布流界面?
RxSwift 支持的操作符 在某些情况,由于不同平台/实现方式,相同的操作符有多个别名,有时相同的操作命名也不一样,有些是因为历史的原因,但是还有一些是因为语言的预留关键字。...当缺少社区共识的时候,RxSwift 通常会包含多个别名。 默认情况下,操作符是没有状态的。...delaySubscription do / doOnNext observeOn / observeSingleOn subscribe subscribeOn timeout using debug 条件和...操作符 multicast publish refCount replay shareReplay 创建新的操作符也是相当简单的。...DelegateProxy {} public func rx_setDelegate(delegate: UIScrollViewDelegate) {} public var rx_contentOffset
目前可移动的导航栏非常常见,以网易、京东、淘宝为首,都用到了此类导航栏,即可以左右滑动,选择更多。...、UICollectionView、UIScrollView,在此,我们优先选择scrollView,至于那一个个栏目,我的思路是UIButton即可。...如果选择的是UICollectionView,那一个个栏目便是UICollectionView的item 1、创建常量 private let titleWidth : CGFloat = 80 private...//选择的栏目 private var sliderView:UIView?//指示器 private var topScroll:UIScrollView?...scroll.addSubview(titleButton) self.buttonArray.append(titleButton) } } 效果如下: 4、添加选中时的颜色和滑块指示器
UIPickerView 选择器控件 数据源(DataSource) 代理(Delegate) 可以通过代码和拽线的方式设置数据源和代理。...数据联动 在某一列滚动的时候,重新设置联动列的显示数据,然后进行刷新操作。...UITableViewDiffableDataSource 在 iOS 13 中引入了新的 API — Diffable Data Source,它不仅能够驱动 UITableView 和 UICollectionView...,而且可以更简单高效的实现数据的刷新。...介绍 UICollectionViewCompositionalLayout 是在已有的 Item 和 Section 的基础上,增加了一个 Group 的概念。
菜单遮罩的颜色、大小和箭头的大小也可以设置参数来控制; 菜单实现了防止用户连续点击功能; 支持pod导入. 3....组件导入 组件支持直接将组件文件夹拖入工程和使用Pods管理两种方式导入: ▐ 3.1 直接将组件文件夹拖入工程方式 把 GFPageControler 文件夹拖到工程中,选择 copy ?...原理: 原理其实很简单:就是弄两个视图,内容和位置一样,只是他们的文字颜色不一样而已!...} 3、需要一个遮罩,一个UICollectionView在遮罩下面,一个在遮罩上面; [self addSubview:self.collectionViewBottom]; [self addSubview...:self.maskView]; [self.maskView addSubview:self.collectionViewTop]; 4、在遮罩上面的UICollectionView超出遮罩的部分的内容不显示出来
" + $1 } .map { "Greetings, \\($0)" } .bindTo(greetingLabel.rx_text) 在 UITableView 和 UICollectionView...状态 允许变化的语言可以更容易地访问全局状态并且改变它。...但是在另一方面,当使用一种巧妙的方式,命令式语言可以编写出更高效的代码,从而更接近硬件。 通常对抗组合崩溃的方法是尽可能简单的保持状态,并且使用单向数据流来获取模型数据。 这就是 Rx 的亮点所在。...Rx 是在函数和必要世界之间的平衡点。它可以让你使用不可变的定义和虚函数,在一个可靠的组合方式里来处理可变状态的快照。 那么什么是一些简单的例子呢?...有一个所有 Rx 操作符 巨大的列表,并且列出了包含所有 支持当前 RxSwift 的操作符。 每个操作符,都对应一个 宝石图 解释了它的用法。 但是如果你需要一些操作符没有在列表上怎么办?
在直播卖货小程序源码中,一般都包含商品分类页面,如下图,那么这个页面是如何通过代码实现的呢?下面,小编以iOS版本的开发过程为例,来讲述下实现过程。...图片1.png 左边一级分类使用tableview来展示,右边的耳机分类使用collectionview来展示,主要就是实现一二级分类的联动。下面主要讲下点击和滑动。...sectionheader的高度 _classCollectionView.contentOffset = CGPointMake(0, _classCollectionView.contentOffset.y...* NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ isClickLeft = NO; }); } } 2、在collectionview...的代理方法中更改一级分类的选中 ///collectionview将要加载头尾视图调用的方法 - (void)collectionView:(UICollectionView *)collectionView
前言 今天跟大家来聊聊一个强大的 UI 控件:UICollectionView。...UICollectionView 是 iOS6 之后引入的一个新的 UI 控件,与 UITableView 有着很多相似的地方,在开发过程中我们都会选择使用它们俩来为 App 的整个页面进行布局,比如说淘宝的首页...如何使用 UICollectionView 实现网易云首页卡片轮播效果。...JUST DO IT 想到滚动,大家首先想到的肯定是用 UIScrollView + UIImageView 的方式来实现,但是 UICollectionView 给我们提供了更好的选择,因为它本身继承自...,但是如果要正式在 app 中使用,并且达到很好的用户体验还是有很大的优化空间的。
data sources介绍的是数据源方面的工作 值得一提的是,UICollectionView的升级是2019年开始的,所以20的分享更多的在19的基础上,对这方面感兴趣的同学可以从19开始看,这里推荐一篇文章..., DiffableDataSource 类似于DiffableDataSource的概念其实我们在IGList中有接触,通过为数据源设置不同的identifier实现数据源和UI的绑定。...在刷新数据源时,只要重新计算diff,计算进行局部刷新,可以大大提高UICollectionView的性能。...该环境附带了用于创建,擦除和选择线条的工具。...和UITableView允许选择跟随键盘焦点。
emoji表情是unicode码中为表情符号设计的一组编码,当然,还有独立于unicode的另一套编码SBUnicode,在OS系统中,这两种编码都有很好的支持。...编码后再进行传输,因此,有两中方式,一种是通过自定义一套表情切图,将其与unicode码一一对应,在转码的时候,我们一一遍历,转换成unicode后进行传输,这样的好处是我们可以保证所有平台所能使用的表情统一...在iOS端,可以有另一种方式,通过上面我们知道,通过SBUnicode码我们可以在客户端显示表情符号,并且这个码的排列是十分有规律的,通过这个特点,我们可以通过遍历SBUnicode码的范围进行表情的创建...我们可以通过遍历的方法,将其都加入数据源数组中: int emojiRangeArray[10] = {0xE001,0xE05A,0xE101,0xE15A,0xE201,0xE253,0xE401,0xE44C...0:1); pageControlBottom.currentPage = page; } 三、切换系统键盘和自定义的表情键盘 UITextField和UITextView都会有下面这个属性和方法
写在开头 大家早上好,今天我又给大家带来了一篇关于 UICollectionView 系列的文章,在上一篇文章中,我们实现了一个酷炫的瀑布流布局,带大家初步的了解了在 UICollectionView...的滚动是分页滚动,而且每次停止的位置都是与UICollectionView 的中心点重合 需求已经明确了,那我们该如何去实现呢!...同学你讲的没错,但是当我们 Cell 的 width 加上边距等如果不占满 UICollectionView,那么就会出现一个问题,虽然你实现了分页效果,但是你的 Cell 在滚动的过程中是不会居中的....那该如何不通过设置 isPagingEnabled 来实现 Cell 分页滚动和居中显示呢!请接着往下看....contentOffset.x + collectionView!.
,如果不设置 个人更推荐第二个 6.使用 UICollectionView 来展示图片多选: 图片多选择中使用 UICollectionView 来展示图片...,好处:展示简单,删除更简单。...设置 > 通用 > 辅助功能 > 语音,开启“朗读所选项”,并在“嗓音”中选择“中文” 在真机测试的时候,碰巧那台手机的加减音量按键失效了,于是在手机设置里把音量调到最大...,可是在测试的时候还是音量很小,最后换了一台手机,在测试的时候使用+-键加大了音量,声音果然大了起来,才发现手机设置-> 声音-> 设置的声音大小是来电铃声的音量大小,并不是扬声器的音量。...debug包就是我们要给设计师的app包了。 如何能让设计师傻瓜式的安装这个app呢?这里介绍一个命令行工具,ios-sim命令行工具。
当然下方的效果是一些资讯类App中选择分类时,常用的部分。主要还是对UICollectionView的使用。当然,下方效果的实现,网上也不乏相应的实例。...在之前的博客中,我们系列的介绍了UICollectionView的各种回调,以及如何自定义CollectionView的布局,并给出了如何使用CollectionView自定义瀑布流。...上面这个效果就是我们今天博客中所实现的效果,而下方这两个效果是我们之前在聊UICollectionView以及自定义布局时所给出的相应的Demo, 下方的Demo所对应的源码也在Gitbub上进行了分享...二、控件的调用 我们将上述分类选择的控件进行了封装,接下来,我们将会给出其初始化和调用的方式。...数据源创建好后,在实例化CESelectThemeController对象时,将相应的数据源传给我们的控件即可。
前言 前文介绍的是小说阅读器的设计和实现,本文作为补充对多种翻页模式做详细剖析。 正文 常见的阅读器翻页模式包括:平移、仿真、滑页和上下: 平移:左右滑动; ?...通常iOS实现滑动会有两大选择:UIScrollView和UITableView;(UICollectionView和UITableView类似) UIScrollView存在一个较大的局限:上面的视图资源无法回收利用...会造成contentSize和contentOffset的改变,导致界面可能会出现闪烁,需要各类逻辑的特殊处理。...遇到的问题(Q&A): Q:如何实现UIScrollView改变offset,但是继承原来的速度?...A: 这是因为pan手势在切后台时会自动cancel,所以需要在手势处理增加对cancel状态的处理; Q:如果初始化的时候,传进的VC.view不满一屏,该如何处理?
在 iOS 13 中 Apple 为 UITableView 和 UICollectionView 引入了 DiffableDataSource,让开发者可以更简单高效的实现 UITableView、UICollectionView...新的刷新的方法为 apply,通过使用 apply 方法无需计算变更的 indexPaths,也无需调用 reload,即可安全地在主线程或后台线程更新 UI, 仅需简单的将需要变更后的数据通过 NSDiffableDataSourceSnapshot...实现步骤 使用 DiffableDataSource 配置当前 UITableView 的数据源。...,使用 DataSourceSnapshot 处理变更后的数据源,其有 append、delete、move、insert 等方法。...query.isEmpty else { return true } return name.contains(query) } } 点击事件中,获取 cell 的方式也和之前不一样
业务痛点 iOS 界面开发中 UITableView / UICollectionView 的出场率极高,它们都是使用代理方法配置数据源,虽然这样的设计理念符合了单一职责原则,但在列表变得复杂时代理方法的处理将变得力不从心...图1 代码简单轻量 YBHandyList 保留最小功能,代码量很少,核心思路就一句话:将 UITableView / UICollectionView 的数据源从代理方法配置转化为数组配置。...直观的动态化控制 构建界面只需要关注所有id在数据源数组中的顺序,就像搭积木一样拼接起来,数组中的顺序就是对应 Cell 在界面中的显示顺序,由此就能通过改变数据源数组的顺序轻易的实现动态化控制...更安全和优雅的复用 很多时候,我们会将具体业务的处理逻辑放 Cell 中或者其 ViewModel 中,那么它们就很难复用,因为复用是建立在无具体业务侵入的前提下。...这看起来有些繁琐,使用多代理技术能避免额外的创建代理实现类,但这样会导致代码不再简单和透明。
接下来将会详细的介绍其实现方案。 ? 二.该自定义布局的使用方式 我们先看一下该自定义布局是如何使用的,然后再通过使用方式来逐步介绍它是如何实现的。...这也是一个由浅入深的过程,因为用起来要比做起了更容易。比如开汽车容易,造汽车可就麻烦多了。所以在本篇博客的第二部分,将要介绍如何去使用该自定义组件。...和Delegate, 我们还需实现布局的代理方法,该自定义布局要实现的代理方法如下。...如何实现 上面介绍了如何去使用该自定义组件,接下来就是“造车”的过程了。本篇博客的第三部分介绍如何去实现这个自定义布局。 1. ...预加载布局方法, 该方法会在UICollectionView加载数据时执行一次,在该方法中负责调用一些初始化函数。具体如下所示。
{ return 10; } //定义展示的Section的个数 -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)...collectionView { return 2; } //每个UICollectionView展示的内容 -(UICollectionViewCell )collectionView:(UICollectionView...被选中时调用的方法 -(void)collectionView:(UICollectionView )collectionView didSelectItemAtIndexPath:(NSIndexPath...如果要永久改变,可以先改数据源,然后在cellForItemAtIndexPath中控制。(和UITableView差不多吧!...是否可以被选择 -(BOOL)collectionView:(UICollectionView )collectionView shouldSelectItemAtIndexPath:(NSIndexPath
Swift中比较常见的控件UICollectionView 首先我们设置一个全局的UICollectionView和一个数据源 var colltionView : UICollectionView...var dataArr = NSMutableArray() 然后设置UICollectionView的3个代理 UICollectionViewDelegate,UICollectionViewDataSource...没错,我们的headview是不是还没整啊? 接下来呢,我们看下UICollectionView的headview该怎么设置 重点在这里!...更多经验请点击 原文在:http://www.allluckly.cn/ 最终效果图如下 Swift_CollTionView.gif 推荐一款学习iOS开发的app_____|___...___| | 传送门 技术交流群:534926022(免费) 511040024(0.8/人付费) 版权归©Bison所有 如需转载请保留原文超链接地址!