首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

具有自定义hidesSearchBarWhenScrolling行为的iOS13 - UITableView + UISearchController

在iOS13中,可以通过使用UITableView和UISearchController来实现具有自定义hidesSearchBarWhenScrolling行为的功能。

UITableView是iOS中常用的表格视图控件,用于展示大量的数据列表。它可以方便地实现滚动和数据管理等功能。

UISearchController是iOS中用于实现搜索功能的控制器。它提供了一个搜索栏,并可以与UITableView结合使用,实现在表格中搜索数据的功能。

具有自定义hidesSearchBarWhenScrolling行为的iOS13的UITableView + UISearchController可以通过以下步骤实现:

  1. 创建UITableView对象,并设置其数据源和代理。
  2. 创建UISearchController对象,并将其设置为表格视图的搜索控制器。
  3. 设置UISearchController的属性,包括搜索结果更新的方法和搜索栏的外观等。
  4. 将UISearchController的搜索栏添加到UITableView的表头视图中。
  5. 在UITableView的代理方法中,根据搜索栏的活动状态和滚动位置,控制搜索栏的显示和隐藏。

具体代码示例如下:

代码语言:txt
复制
import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchResultsUpdating, UIScrollViewDelegate {
    
    @IBOutlet weak var tableView: UITableView!
    
    var searchController: UISearchController!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 创建UITableView对象
        tableView.dataSource = self
        tableView.delegate = self
        
        // 创建UISearchController对象
        searchController = UISearchController(searchResultsController: nil)
        searchController.searchResultsUpdater = self
        
        // 设置UISearchController属性
        searchController.searchBar.placeholder = "搜索"
        
        // 将UISearchController的搜索栏添加到UITableView的表头视图中
        tableView.tableHeaderView = searchController.searchBar
        
        // 设置UITableView的contentInset,使搜索栏始终保持在顶部
        tableView.contentInset = UIEdgeInsets(top: searchController.searchBar.frame.height, left: 0, bottom: 0, right: 0)
        
        // 设置UIScrollViewDelegate代理
        tableView.scrollViewDelegate = self
    }
    
    // UITableViewDataSource方法
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // 返回表格的行数
        return data.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // 返回单元格视图
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = data[indexPath.row]
        return cell
    }
    
    // UISearchResultsUpdating方法
    
    func updateSearchResults(for searchController: UISearchController) {
        // 更新搜索结果
        let searchText = searchController.searchBar.text
        // 根据搜索文本过滤数据并刷新表格视图
        // ...
    }
    
    // UIScrollViewDelegate方法
    
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        // 根据滚动位置控制搜索栏的显示和隐藏
        if scrollView.contentOffset.y > 0 {
            searchController.searchBar.isHidden = true
        } else {
            searchController.searchBar.isHidden = false
        }
    }
}

这样,就实现了具有自定义hidesSearchBarWhenScrolling行为的iOS13的UITableView + UISearchController功能。

推荐腾讯云相关产品:腾讯云移动开发解决方案,提供全套的云计算服务,包括云服务器、对象存储、人工智能等,满足开发者的各种需求。具体产品介绍和链接地址请参考:腾讯云移动开发解决方案

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【IOS开发基础系列】UISearch专题

    = @"搜索";     //10.取消键盘操作     [searchBar resignFirstResponder];     //11.设置代理     //UISearchBar不执行搜索行为...(当搜索内容为空时,返回时所有数据,如果搜索内容为空,返回空时,需要进行其它修改操作.) 4 开发技巧 4.1 兼容IOS7、8并结合自定义导航条使用 4.1.1 核心思路         虽然UISearchController...中也有Search bar变量,但是此界面中Search bar必须自己新建定义,不能通过重用UISearchController....此界面中Search bar只用于触发搜索操作,从而显示UISearchController页面。        ...而用户退出UISearchController界面时,同样要记得重新设置此界面的布局,以便让用户觉得此Search bar是UISearchController界面中下移下来

    45820

    手把手带你撸一个网易云音乐首页(三)

    关于 headView 实现方式,想必使用过 UITableView 同学都不会陌生,可以通过下面的方法来实现: - (nullable UIView *)tableView:(UITableView...,第一个冒出来想法就是在 Cell 中放置 UICollectionView,它布局也很简单,直接用系统提供即可,不需要我们去自定义布局。...image 有人要问那是不是 UICollectionView 这个控件就只能按照屏幕大小来分页呢!答案当然是否定。我们还可以用自定义方式来实现分页滚动。...,决定了 UICollectionView 停止滚动时偏移量,可以通过重写这个函数来实现自定义分页滚动,重写这个函数逻辑思路如下: 定义一个坐标点 CGPoint 来记录最新滚动偏移坐标 定义俩个值分别为...不过,由于搜索栏需要自定义一些样式,我们可以先定义一个 UISearchController 成员变量,将它属性初始化好以后,再进行赋值,代码如下: self.searchController

    2.3K10

    WWDC20中iOS改变

    Group 有三种形式水平(horizontal)、垂直(vertical)、自定义(custom)从这里可以看出,collectionView布局越来越多样,越来越多样,多性能监控和用户行为监控提了更高要求...也就意味着collectionView可以做UItableView事情了(不再需要UItableView),同样,该样式还支持左滑删除等tableview特色属性。...Modern Collection Views 是iOS13推出iOS14持续更新新概念,有兴趣童鞋可以继续去https://developer.apple.com/news/?...,卡顿、慢、内存泄漏情况可能会一定程度突出,而布局复杂和数据源局部更新对于用户行为获取也要求更高,需要实时逐个层级获取,才能获取准确用户行为内容。...特别是去TableView化趋势,这样来看UICollectionView将会成为以后自定义UI主流。

    1.7K10

    SDWebImage: 带你制作精美的相册

    这个类库提供一个UIImageView类别,支持加载来自网络远程图片。具有缓存管理、异步下载、同一个URL下载次数控制和优化等特征。...,在类头文件(.h)中导入头文件: 在上面的效果图中,大家肯定一眼就看出来这是一个UITableView;没错,对于展示类页面来讲,UITableView就是最佳选择,如果你接触iOS开发到一定阶段...现在社会是一个看颜值社会,好看界面当然离不开我们去自定义控件;在这个tableView中,我们自定义了UITableViewCell,代码如下: 这个自定义Cell, 主要是由 FLAnimatedImageView...(由SDWebImage库所提供), CAShapeLayer,以及UILable所构成,并抛出一个设置图片接口,该接口会去调用SDWebImage库中下载图片并缓存接口: 自定义好了Cell,接下来就要去创建一个...UITableView控件去加载它, 这里UITableView功能比较简单,就不多做介绍了。

    79820

    跟iOS UI捉迷藏(如何获取用户点击行为控件title)

    近期,接到一个需求,需要获取用户点击行为操作路径,除了点击坐标,classname等常用数据外,还需要控件title,这样就可以更加直观了解到用户操作行为。...1.如何获取用户控件点击行为 事实上,由于获取“所见所得”点击view行为,所以,思路上应该是对uiview或者及其子类得某个事件方法hook到,这样触发点击(广义上是触摸)行为后,可以根据发送事件确定点击...,还对不同控件优先顺序进行了说明,这对比较复杂自定义UI是比较重要。...我们只需要通过hook UIControl sendAction:to:forEvent: 或 sendAction:to:from:forEvent: 自定义事件执行target及action。...] text]; 下面加大难度,获取UITableViewcell内容 二阶获取控件:UITableViewcell 通过上面的方法,当用户点击了红色字体内容后,响应view是UITableViewCellContentView

    1.3K10

    Cobub无码埋点关键技术实现流程(附图)

    有码埋点比较容易理解,即调用SDKAPI,在代码中插入埋点相关代码,实现用户行为采集。...由于我们在开发项目的时候,埋点都是手动,每次业务需求改变都要到处埋点,而无码埋点,即不需要手动插入代码,只需要前期进行相关配置,SDK自动采集用户行为,极大程度避免了因需求变更、埋点错误等原因导致重新埋点繁复工作...2.在上一步弹框中输入自定义事件名称,名称将会和视图viewPath绑定起来。viewPath是视图唯一标识,在下文中将详细讲解。...实现流程中技术点 可视化视图圈选实现 自定义UIWindow子类,当做悬浮小圆圈,添加UIPanGestureRecognizer手势,根据手势位移,设置悬浮框位移。...由于event参数是nil,最终找到视图并不一定是能响应用户手势视图,如果不能响应则遍历其父视图,直到找到能响应用户行为视图。

    1.4K60

    iOS学习——tableview中带编辑功能cell键盘弹出遮挡和收起问题解决

    框架官方文档中就有提到要避免将HUD添加到具有复杂视图层次结构某些UIKit视图(如UITableView或UICollectionView),UITableViewController和UICollectionViewController...中self.view实际上就是对应UITableView或UICollectionView,所以会出现一些莫名其妙bug,显示不出来或者显示位置不对。...然而,避免将HUD添加到具有复杂视图层次结构某些UIKit视图(如UITableView或UICollectionView)是一个好主意。...cell在我们项目开发包中经常要用到,所以我们就需要对这类cell进行封装和自定义。...2.1 UITextField或UITextView点击之后详细流程   在对cell进行封装和自定义时候,我们需要考虑我们UITextField或UITextView从点击编辑框到结束编辑整个过程是怎么样

    3.9K80

    简易理解设计模式之:适配器模式——Android列表视图控件设计方式

    Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //创建一个自定义...最后我们可以得出结论,这个模式用法之一是:需要一个统一输出接口,而输入端类型不可预知。 2、自定义一个列表视图 此部分采用代理模式篇幅中例子,继续做一个表视图控件。...= new UITableView(); tableView.setAdapter(new MyAdapter()); tableView.initView();...可以发现具有很高灵活性! 总结: 此篇章从设计控件角度介绍这个模式,我也认为这是这个模式最大特点。重点关注就是适配器角色,如何把数据源适配到目标接口是我们需要处理问题。...简易理解设计模式之:代理模式——iOS视图控件设计方式 行为型模式: 简易理解设计模式之:策略模式——优化一下支付功能 简易理解设计模式之:模板方法模式——Android中BaseActivity

    68310

    优雅处理网络数据,你真的会吗?不如看看这篇.

    (Cache)和获取图像,来使你 App 具有更高响应速度 无限滚动,无缝加载 提到列表分页,相信大家第一个想到就是 MJRefresh,用于上拉下拉来刷新数据,当滚动数据到达底部时候向服务器发送请求...简单说下我思路: 先自定义一个 Cell 视图,这个视图由一个 UILabel 和 一个 UIImageView 构成,用于显示文本和网络图片;然后模拟网络请求来获取数据,注意该步骤一定是异步执行...;最后用 UITableView 来显示返回数据,在 viewDidLoad 中先请求网络数据来获取一些初始化数据,然后再利用 UITableView Prefetching API 来对数据进行预加载...UITableView 行数并 Reload,那我之前说 Prefetching API 在这种情况下就失去作用了,因为它起作用前提是要保证预加载数据时 UITableView 当前行数要小于它总行数...UI,其实这样做是一种比较低效行为,因为这个方法需要为每个 Cell 调用一次,它应该快速执行并返回重用 Cell 实例,不要在这里去执行数据绑定,因为目前在屏幕上还没有 Cell。

    1.4K20

    从 0 到 1 搭建技术中台之 iOS 可视化埋点实践

    通过全埋点技术,尽可能地将用户所有交互行为进行采集上报,然后通过可视化圈选方式筛选出感兴趣行为统计数据,为产品运营提供决策支持。...可视化埋点具有“全面、便捷、低技术门槛”特点,能够有效降低研发、运营成本,是对传统代码埋点技术有力补充。...事件标识定义 全埋点采集用户行为,需要解决最大问题是:如何精确描述行为事件。通常对页面和页面中可交互元素分别进行定义。 A....页面所属控制器存在自定义父控制器 例如:一个控制器包含了若干子控制器,且通过 UIScrollView 分页方式呈现各子控制器视图。...对于具有复合内容元素,有时会对其中某一项内容进行统计,该内容内容标识可以参与到事件匹配。 考虑到性能影响,一个元素内容遍历深度一般不超过 5。

    1.1K20

    iOS开发UI篇--一个可扩展性极强树形控件

    然而IOS自带控件中并不存在树形控件,我们要在IOS开发中使用树形控件,通常需要自己扩展UITableView列表控件。 现在在这里开源一个自己写高扩展性,高复用性IOS树形结构控件。...三、实现原理 树形结构列表用其实就是UITableView控件,但是如何能够让UItableView能够动态增加和删除指定行数cell是实现树形结构关键所在。...这时候我们需要用到两个UItableView自带行数: - (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation...cells,第二个函数用来在指定位置删除cells,并且这二个函数都自带多种动画效果,让删除和插入过程不至于太突兀、有种渐变感觉,具有良好用户体验。...,样式比较简单,如果你要展现更加漂亮样式,可以自定义cell。

    1.2K00
    领券