一些工具类

runTime的简单应用

2016-06-30  本文已影响38人  wsj2012

利用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

上一篇下一篇

猜你喜欢

热点阅读