viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"menu_icon.png"] style:UIBarButtonItemStylePlain target:nil action:nil];在iOS7出来的按钮向右偏了大概20像素。怎么移回去。用CustomerView,设置它的位置也不行。
有没有人有同样的问题?

解决方案 »

  1.   

    viewController.navigationItem.leftBarButtonItem可以设置位置吗?CustomerView里的图片应该可以设置位置吧。
      

  2.   

    用了customerView,然后btn.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0),向左移20个像素,但我感觉好山寨,应该还有其他途径的
      

  3.   

    self.navigationController.navigationBar.translucent = NO;
      

  4.   

    用了customerView,然后btn.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0),向左移20个像素,但我感觉好山寨,应该还有其他途径的这样实现不了的吧?山寨不山寨先不说,你确定你已经实现了?
      

  5.   

    用了customerView,然后btn.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0),向左移20个像素,但我感觉好山寨,应该还有其他途径的这样实现不了的吧?山寨不山寨先不说,你确定你已经实现了?
    已实现,确实可以的。
      

  6.   

    用了customerView,然后btn.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0),向左移20个像素,但我感觉好山寨,应该还有其他途径的这样实现不了的吧?山寨不山寨先不说,你确定你已经实现了?
    已实现,确实可以的。整体的代码贴出来看一下嘛 我试了一下好像没有效果额
      

  7.   

    用了customerView,然后btn.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0),向左移20个像素,但我感觉好山寨,应该还有其他途径的这样实现不了的吧?山寨不山寨先不说,你确定你已经实现了?
    已实现,确实可以的。整体的代码贴出来看一下嘛 我试了一下好像没有效果额大概就是下面这样,注意:要用setImage, 不要用setBackgroundImageUIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, ITEM_WIDTH, ITEM_HEIGHT)];
    [btn addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside];
    [btn setImage:[UIImage imageNamed:@"naviationbar_button_normal.png" ] forState:UIControlStateNormal];
    [btn setImage:[UIImage imageNamed:@"naviationbar_button_pressed.png" ] forState:UIControlStateHighlighted];
    btn.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0);
    UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
    self.navigationItem.leftBarButtonItem = backItem;
      

  8.   

     嗯 果然能实现  起初设置了setBackgroundImage的问题 setImage 才对, 细节决定成败 谢了楼主
      

  9.   

    UIBarButtonItem *btnPubPost = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"question24"] style:UIBarButtonItemStyleBordered target:self action:@selector(clickPubPost:)];
      self.navigationItem.rightBarButtonItem = btnPubPost;
    这样写没有出现位置下移的情况,IOS6和IOS7都没问题
      

  10.   

    那右边这个呢,我右移20个像素不管用,它只把图片压了,位置还是没动
    UIButton *userBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 45, 44)];
            [userBtn setImage:[UIImage imageNamed:@"top_navigation_plusicon" ] forState:UIControlStateNormal];
            userBtn.imageEdgeInsets = UIEdgeInsetsMake(0,20, 0, 0);
            UIBarButtonItem *rightBackItem = [[UIBarButtonItem alloc] initWithCustomView:userBtn];
            self.navigationItem.rightBarButtonItem = rightBackItem;
            [rightBackItem release];
            [userBtn release];
      

  11.   

    在iOS 7中,苹果引入了一个新的属性,叫做[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll。当你的容器是navigation controller时,默认的布局将从navigation bar的顶部开始。这就是为什么所有的UI元素都往上漂移了44pt。修复这个问题的快速方法就是在方法- (void)viewDidLoad中添加如下一行代码:
    self.edgesForExtendedLayout = UIRectEdgeNone;
      

  12.   

    我的微博里有完整的代码专门解决这个问题的: 
    http://weibo.com/u/2822867275 要用到 Method Swizzling, 什么是MS 我的微博里也有介绍。
      

  13.   


    无意中看到这个帖子,应该是上移64,而不是44吧
    44只是nav的高度....再加上20的通知栏就是64了.....
      

  14.   

    UIButton * backButton = [UIButton buttonWithType:UIButtonTypeCustom];
    backButton.frame = CGRectMake(0, 0, 60, 44);
    [backButton setImage:[UIImage imageNamed:@"back_btn_bg.png"] forState:UIControlStateNormal];
    [backButton setTitle:@"Back" forState:UIControlStateNormal];
    [backButton setTitleEdgeInsets:UIEdgeInsetsMake(-1, -55, 0, 0)];
    [backButton.titleLabel setFont:[UIFont boldSystemFontOfSize:14.0]];
    [backButton setTitleColor:[UIColor colorWithRed:233.0/255.0 green:220.0/255.0 blue:207.0/255.0 alpha:1.0]
                     forState:UIControlStateNormal];
    UIBarButtonItem *backNavigationItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
     
    // 调整 leftBarButtonItem 在 iOS7 下面的位置
    if(([[[UIDevice currentDevice] systemVersion] floatValue]>=7.0?20:0)){
      UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
                                         initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
                                         target:nil action:nil];
      negativeSpacer.width = -10;
      self.navigationItem.leftBarButtonItems = @[negativeSpacer, backNavigationItem];
    }else
      self.navigationItem.leftBarButtonItem = backNavigationItem;
      

  15.   

    贴人代码不贴来源,负分,原文请看:修复iOS7下leftBarButtonItem位置相比之前版本靠右的问题http://blog.yorkgu.me/2013/11/15/fix-position-of-leftbarbuttonitem-under-ios7/
      

  16.   

    1. 隐藏navigationController的navigationBar;
    2. 自己写一个navigationBar
    3. 将navigationBar的按钮动作进行设置。
    (因为一个navigationBar的视图其实很简单,所以找不到对应的API的话,自己写一个其实是一种效率蛮高的做法,而且后期再遇到类似的问题以更方便解决)