为UINavigationBar 写一个分类。UINavigationItem+correct_offset.h  
转载 http://www.colabug.com/thread-1112420-1-1.html
  #import  
  @interface UINavigationItem (correct_offset) 
  - ( void )addLeftBarButtonItem:( UIBarButtonItem *)leftBarButtonItem; 
  - ( void )addRightBarButtonItem:( UIBarButtonItem *)rightBarButtonItem; 
@end
  #import "UINavigationItem+correct_offset.h" 
  #define  ios7 ([[[UIDevice currentDevice] systemVersion] floatValue]>= 7.0 ?YES:NO) 
  @implementation UINavigationItem (correct_offset) 
  - ( void )addLeftBarButtonItem:( UIBarButtonItem *)leftBarButtonItem 
{
      if ( ios7 ) { 
          // Add a spacer on when running lower than iOS 7.0 
          UIBarButtonItem *negativeSpacer = [[ UIBarButtonItem alloc ] initWithBarButtonSystemItem : UIBarButtonSystemItemFixedSpace 
                                                                                          target : nil action : nil ]; 
          negativeSpacer. width = - 20 ; 
          [ self setLeftBarButtonItems :[ NSArray arrayWithObjects :negativeSpacer, leftBarButtonItem, nil ]]; 
      } else { 
          // Just set the UIBarButtonItem as you would normally 
          [ self setLeftBarButtonItem :leftBarButtonItem]; 
     }
}
  - ( void )addRightBarButtonItem:( UIBarButtonItem *)rightBarButtonItem 
{
      if ( ios7 ) { 
          // Add a spacer on when running lower than iOS 7.0 
          UIBarButtonItem *negativeSpacer = [[ UIBarButtonItem alloc ] 
                                             initWithBarButtonSystemItem : UIBarButtonSystemItemFixedSpace 
                                             target : nil action : nil ]; 
          negativeSpacer. width = 10 ; 
          [ self setRightBarButtonItems :[ NSArray arrayWithObjects :negativeSpacer, rightBarButtonItem, nil ]]; 
      } else { 
          // Just set the UIBarButtonItem as you would normally 
          [ self setRightBarButtonItem :rightBarButtonItem]; 
     }
}
@end
  在要设置返回按钮的UIViewController中按照如下使用。
  [ self . navigationItem addLeftBarButtonItem: [ self  creatBarItemWithAction : @selector (dismiss)]]; 
   creatBarItemWithAction是我自己写的一个方法。 
  
/**
   *  退出视图。 
  */
  -( void )dismiss 
{
      [ self dismissViewControllerAnimated : YES completion : nil ]; 
}
/**
   *  创建一个 UIBarButtonItem 
  *
  *  @param _action action
  *
  *  @return UIBarButtonItem
  */
  -( UIBarButtonItem *)creatBarItemWithAction:( SEL )_action{ 
      UIButton * button = [ UIButton buttonWithType : UIButtonTypeCustom ]; 
      [button setImage :[ UIImage imageNamed : @"backButton.png" ] forState : UIControlStateNormal ]; 
      [button setFrame : CGRectMake ( 0 , 0 , 40 , 40 )]; 
      [button addTarget : self action :_action forControlEvents : UIControlEventTouchUpInside ]; 
      UIBarButtonItem * item = [[ UIBarButtonItem alloc ] initWithCustomView :button] ; 
      return item; 
}
   方式二:在创建自定义 UIBarButtonItem 的时候通过设置自定义view的图片偏移属性来做适配。      
   在要设置返回按钮的UIViewController中按照如下使用。

self . navigationItem . leftBarButtonItem = [ self creatBarItemWithAction : @selector (dismiss) solutiontwo : 2 ]; 
  -( UIBarButtonItem *)creatBarItemWithAction:( SEL )_action solutiontwo:( NSInteger )index{ 
      UIButton * button = [ UIButton buttonWithType : UIButtonTypeCustom ]; 
      [button setImage :[ UIImage imageNamed : @"backButton.png" ] forState : UIControlStateNormal ]; 
      [button setFrame : CGRectMake ( 0 , 0 , 40 , 40 )]; 
      if ( ios7 ) { 
          [button  setImageEdgeInsets : UIEdgeInsetsMake ( 0 , - 30 , 0 , 0 )]; 
     }
      else 
     {
          [button  setImageEdgeInsets : UIEdgeInsetsMake ( 0 , 0 , 0 , 0 )]; 
     }
      [button addTarget : self action :_action forControlEvents : UIControlEventTouchUpInside ]; 
      UIBarButtonItem * item = [[ UIBarButtonItem alloc ] initWithCustomView :button] ; 
      return item; 
}

ios7 自定义UINavigationBar UIBarButtonItem 10px的偏移纠正的更多相关文章

  1. IOS7 自定义UIBarButtonItem 的一些问题

    ios 下自定义导航栏的BarButtonItem 会产生一些偏移问题, 解决方案: 通过新建一个系统的带固定距离的Item来调节你的Item #define   IOS7_NAVI_SPACE   ...

  2. iOS开发备忘录:自定义UINavigationBar背景图片和Back按钮

    iOS项目,根据设计图,有时需要自定义UIView的UINavigationBar的背景.可以切出来一张1像素左右的背景图片,来充当UINavigationBar的背景. 可以利用Navigation ...

  3. iOS7自定义back按钮和pop交互手势

    Clambake for iPhone有一个回退按钮在所有的导航条上.这是一个简单的没有文字箭头. 实现一个自定义按钮是简单的.类似这个设置controller 的navigationItem一个le ...

  4. IOS中GPS定位偏移纠正(适用于Google地图)

    在这个神奇的国度里,我们总得学习一些有中国特色的东东,例如“火星坐标”.也许有人还不知道这是什么玩意,我就简要介绍一下吧.      如果你有带GPS模块的智能手机,打开定位功能,然后访问Google ...

  5. IOS7学习之路九(ios7自定义UIAlertView)

    IOS7的UIAlertView 不支持自定义,无法添加subview . 不过可以用第三方库git上的下载链接    https://github.com/wimagguc/ios-custom-a ...

  6. 自定义UINavigationBar的背景【转】

    from:http://cocoa.venj.me/blog/custom-navbar-background/ 为了让我们的应用程序更加美观,我们往往希望对iPhone自带的控件进行一点自定义.比如 ...

  7. ios之自定义UINavigationBar

    ios5 自定义导航条问题 在ios5之前的系统中,可以通过定义导航条类别的方式自定义导航条: @implementation UINavigationBar (CustomImage)- (void ...

  8. iOS7自定义statusbar和navigationbar的若干问题

    当然有许多问题是这篇文章中没有提到的,按照文章的方法进行设置,你可能会遇到以下问题: 1.navigationbar的背景图片自定义以后,statusbar虽然和navigationbar共用了背景图 ...

  9. iOS LBS相关: 定位和中国特色的位置偏移纠正

    LBS模块,首先当然是定位,获取自己所在的位置.主要用到的就是CLLocationManager,实例一个,然后调用startUpdatingLocation即可.其中可以指定精度CLLocation ...

随机推荐

  1. [CentOS 7] 安装nginx第一步先搭建nginx服务器环境

    简要地介绍一下,如何在CentOS 7中安装nginx服务器 方法/步骤   下载对应当前系统版本的nginx包(package) # wget  http://nginx.org/packages/ ...

  2. PHP错误处理

    错误的分类: 1.语法错误     2.运行时错误 3.逻辑错误 调试方法:1.注释法 2.输出法 error_reporting(E_ALL & ~E_NOTICE & ~E_WAR ...

  3. 关于Cygwin——包管理、替换默认终端、同MSYS的比较

    (搬运自我在SegmentFault的博客) Cygwin 是一个用于 Windows 的类 UNIX shell 环境. 它由两个组件组成:一个 UNIX API 库,它模拟 UNIX 操作系统提供 ...

  4. 完全面向于初学者的Node.js指南

    新的上班时间是周二至周六,工作之余当然要坚持学习啦. 希望这篇文章能解决你这样一个问题:“我现在已经下载好Node.Js了,该做些什么呢?” 原文URL:http://blog.modulus.io/ ...

  5. 内核堆分配函数brk()源码分析

    Evernote公开链接:http://www.evernote.com/shard/s133/sh/5b8d3b26-0e53-4c61-aa43-66f6e87bbcb7/a44096dd557f ...

  6. 插值和空间分析(二)_变异函数分析(R语言)

    方法1.散点图 hscat(log(zinc)~, meuse, (:)*) 方法2.变异函数云图 library(gstat) cld <- variogram(log(zinc) ~ , m ...

  7. MIFARE系列3《卡能源和数据传递》

    在MIFARE卡中,能量和数据通过天线传输,卡中天线为几匝线圈,直接连接到芯片上,不再需要额外的组件.线圈嵌入塑料中,形成了一个无源的非接触卡. 读卡器向IC发一组固定频率的电磁波,卡内有一个IC串联 ...

  8. jQuery对象与DOM对象

    jQuery对象与DOM对象是不一样的 可能一时半会分不清楚哪些是jQuery对象,哪些是DOM对象,下面重点介绍一下jQuery对象,以及两者相互间的转换. 通过一个简单的例子,简单区分下jQuer ...

  9. C++ 的全局构造与析构函数

    我们知道一般的C/C++ 的程序是从main函数开始的,然后在main函数结束后程序结束.但是不然,在main函数开始执行前,已经有其他的指令被执行了. 为了程序的顺利执行,首先要初始化执行环境,比如 ...

  10. super的用法

    1.调用父类的构造方法子类可以调用由父类声明的构造方法.但是必须在子类的构造方法中使用super关键字来调用. 2.操作被隐藏的成员变量和被覆盖的成员方法如果想在子类中操作父类中被隐藏的成员变量和被覆 ...