runTime的简单应用

利用runtime,我们能够根据服务端所给的image来动态的变化TabBarItem的大小,类似像淘宝、京东活动时。思想:主要是利用runtime对UITabBar的layoutSubviews进行重写,然后调整UITabBarItem的位置。

实现:

首先我们使用runtime method swizzling交换系统的- (void)layoutSubviews;

使用KVC对系统的UITabBarButton、UITabBarSwappableImageView、UITabBarButtonLabel、_UIBadgeView进行捕获

拿到控件后我们对其的frame进行计算,判断当前有没有超出tabbar的高度,若超出则进行处理

再次利用runtime method swizzling交换系统的- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event;使图片超过后也能接受点击

代码:

method swizzling:

计算frame,并对其重新布局

让图片超出部分也能响应点击事件

注意事项

在给tabbar设置图片的时候一定要设置图片的renderingMode,否则就会出现下图中图片丢失的现象

UITabBarButton被修改frame之后,仅有UITabBarSwappableImageView能够响应点击事件,不过我们能够在UITabBar的- (void)touchesBegan:(NSSet *)touches withEvent:(nullable UIEvent *)event;方法中捕获到

当适配图片后不要忘记适配_UIBadgeView的frame

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 自己最近在研究Runtime,研究好久才知道了一些大概和简单的应用。在这里做一个笔记。RunTime被称为iOS开...
    Sunrain16阅读 693评论 0 2
  • 首先就是在.m文件导入头文件 通过RunTime对一个类的成员变量进行遍历 通过RunTime对一个类的成员函数进...
    傲视苍穹阅读 336评论 2 3
  • 本篇blog主要讲解如何定制TabBarItem的大小,最终实现AppStore各大主流APP TabBarIte...
    Panda_iOS阅读 2,427评论 7 32
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,824评论 0 9
  • { 11、核心动画 需要签协议,但是系统帮签好 一、CABasicAnimation 1、创建基础动画对象 CAB...
    CYC666阅读 1,591评论 2 4