当前位置: 首页 > news >正文

iOS7 navigation BarButtonItem 多余的空白的解决方案

https://github.com/lemonlabs/UINavigationItem-iOS7Spacing


实现:

 
#import "UINavigationItem+iOS7Spacing.h"
#import <objc/runtime.h>

@implementation UINavigationItem (iOS7Spacing)

- ( BOOL ) isIOS7
{
     return ([[[ UIDevice currentDevice ] systemVersion ] compare : @"7" options : NSNumericSearch ] != NSOrderedAscending );
}

- ( UIBarButtonItem * ) spacer
{
     UIBarButtonItem * space = [[ UIBarButtonItem alloc ] initWithBarButtonSystemItem : UIBarButtonSystemItemFixedSpace target : nil action : nil ];
     space . width = - 11 ;
     return space ;
}

- ( void ) mk_setLeftBarButtonItem: ( UIBarButtonItem * ) leftBarButtonItem
{
     if ([ self isIOS7 ] && leftBarButtonItem ) {
         [ self mk_setLeftBarButtonItem : nil ];
         [ self mk_setLeftBarButtonItems : @[ [ self spacer ], leftBarButtonItem ] ];
     } else {
         if ([ self isIOS7 ]) {
             [ self mk_setLeftBarButtonItems : nil ];
         }
         [ self mk_setLeftBarButtonItem : leftBarButtonItem ];
     }
}

- ( void ) mk_setLeftBarButtonItems: ( NSArray * ) leftBarButtonItems
{
     if ([ self isIOS7 ] && leftBarButtonItems && leftBarButtonItems . count > 0 ) {
        
         NSMutableArray * items = [[ NSMutableArray alloc ] initWithCapacity : leftBarButtonItems . count + 1 ];
         [ items addObject :[ self spacer ]];
         [ items addObjectsFromArray : leftBarButtonItems ];
        
         [ self mk_setLeftBarButtonItems : items ];
     } else {
         [ self mk_setLeftBarButtonItems : leftBarButtonItems ];
     }
}

- ( void ) mk_setRightBarButtonItem: ( UIBarButtonItem * ) rightBarButtonItem
{
     if ([ self isIOS7 ] && rightBarButtonItem ) {
         [ self mk_setRightBarButtonItem : nil ];
         [ self mk_setRightBarButtonItems : @[ [ self spacer ], rightBarButtonItem ] ];
     } else {
         if ([ self isIOS7 ]) {
             [ self mk_setRightBarButtonItems : nil ];
         }
         [ self mk_setRightBarButtonItem : rightBarButtonItem ];
     }
}

- ( void ) mk_setRightBarButtonItems: ( NSArray * ) rightBarButtonItems
{
     if ([ self isIOS7 ] && rightBarButtonItems && rightBarButtonItems . count > 0 ) {
        
         NSMutableArray * items = [[ NSMutableArray alloc ] initWithCapacity : rightBarButtonItems . count + 1 ];
         [ items addObject :[ self spacer ]];
         [ items addObjectsFromArray : rightBarButtonItems ];
        
         [ self mk_setRightBarButtonItems : items ];
     } else {
         [ self mk_setRightBarButtonItems : rightBarButtonItems ];
     }
}

+ ( void ) mk_swizzle: ( SEL ) aSelector
{
     SEL bSelector = NSSelectorFromString ([ NSString stringWithFormat : @"mk_%@" , NSStringFromSelector ( aSelector )]);
    
     Method m1 = class_getInstanceMethod ( self , aSelector );
     Method m2 = class_getInstanceMethod ( self , bSelector );
    
     method_exchangeImplementations ( m1 , m2 );
}

+ ( void ) load
{
     [ self mk_swizzle : @selector ( setLeftBarButtonItem :)];
     [ self mk_swizzle : @selector ( setLeftBarButtonItems :)];
     [ self mk_swizzle : @selector ( setRightBarButtonItem :)];
     [ self mk_swizzle : @selector ( setRightBarButtonItems :)];
}

@end

相关文章:

  • 一般拓扑学--From百度(看了这个,终于明白什么是拓扑了)
  • ASIWebPageRequest的ASIReplaceExternalResourcesWithData模式会造成内存溢出
  • 今天给“小白”换上了新的风扇:酷冷至尊ICT-D725R!
  • 在宏中使用不定参数
  • pydev-一个Eclipse的python开发插件
  • 编译参数-ObjC的说明
  • 服务导向架构(Service Oriented Architecture SOA)
  • 帮助写贝塞尔曲线控制点代码的神器
  • 在NSOperation等待异步请求结束
  • 10月4日培训日记
  • 粗茶淡饭幸福长
  • 致《编程的奥秘》新老读者
  • CocoaAsyncSocket的readDataToLength方法的理解
  • 10月5日培训日记
  • __bridge相关的三个关键字的总结
  • 【5+】跨webview多页面 触发事件(二)
  • Angular数据绑定机制
  • Apache的80端口被占用以及访问时报错403
  • css属性的继承、初识值、计算值、当前值、应用值
  • C学习-枚举(九)
  • Java读取Properties文件的六种方法
  • JWT究竟是什么呢?
  • Laravel Mix运行时关于es2015报错解决方案
  • Python - 闭包Closure
  • React16时代,该用什么姿势写 React ?
  • storm drpc实例
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 警报:线上事故之CountDownLatch的威力
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 什么是Javascript函数节流?
  • 云大使推广中的常见热门问题
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #git 撤消对文件的更改
  • $jQuery 重写Alert样式方法
  • (003)SlickEdit Unity的补全
  • (1) caustics\
  • (HAL库版)freeRTOS移植STMF103
  • (python)数据结构---字典
  • (差分)胡桃爱原石
  • (多级缓存)多级缓存
  • (转)Unity3DUnity3D在android下调试
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)视频码率,帧率和分辨率的联系与区别
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .gitattributes 文件
  • .gitignore文件设置了忽略但不生效
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .Net MVC + EF搭建学生管理系统
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET大文件上传知识整理
  • .Net各种迷惑命名解释
  • :“Failed to access IIS metabase”解决方法
  • @cacheable 是否缓存成功_Spring Cache缓存注解