ios7下navigationItem位置问题。

southbirdfly 2013-10-08 05:17:50
viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"menu_icon.png"] style:UIBarButtonItemStylePlain target:nil action:nil];

在iOS7出来的按钮向右偏了大概20像素。怎么移回去。用CustomerView,设置它的位置也不行。
有没有人有同样的问题?
...全文
12031 25 打赏 收藏 举报
写回复
25 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wsdhren 2015-05-18
1. 隐藏navigationController的navigationBar; 2. 自己写一个navigationBar 3. 将navigationBar的按钮动作进行设置。 (因为一个navigationBar的视图其实很简单,所以找不到对应的API的话,自己写一个其实是一种效率蛮高的做法,而且后期再遇到类似的问题以更方便解决)
  • 打赏
  • 举报
回复
gyq5319920 2015-05-16
贴人代码不贴来源,负分,原文请看: 修复iOS7下leftBarButtonItem位置相比之前版本靠右的问题 http://blog.yorkgu.me/2013/11/15/fix-position-of-leftbarbuttonitem-under-ios7/
引用 22 楼 hn452284075 的回复:
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;
  • 打赏
  • 举报
回复
章鱼小王子 2014-12-17
终于找到这方法了,赞
  • 打赏
  • 举报
回复
hn452284075 2014-11-25
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;
  • 打赏
  • 举报
回复
SoaringHeart_ 2014-05-04
感谢楼主,帮忙了
  • 打赏
  • 举报
回复
_0筱筱0_ 2014-05-02
引用 18 楼 zuoErJin 的回复:
[quote=引用 12 楼 kuqideyupian 的回复:] 在iOS 7中,苹果引入了一个新的属性,叫做[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll。当你的容器是navigation controller时,默认的布局将从navigation bar的顶部开始。这就是为什么所有的UI元素都往上漂移了44pt。 修复这个问题的快速方法就是在方法- (void)viewDidLoad中添加如下一行代码: self.edgesForExtendedLayout = UIRectEdgeNone;
无意中看到这个帖子,应该是上移64,而不是44吧 [/quote] 44只是nav的高度....再加上20的通知栏就是64了.....
  • 打赏
  • 举报
回复
伦敦iOS小牛 2014-05-02
引用 17 楼 u014609935 的回复:
我的微博里有完整的代码专门解决这个问题的: http://weibo.com/u/2822867275 要用到 Method Swizzling, 什么是MS 我的微博里也有介绍。
这个才是正解阿。。。
  • 打赏
  • 举报
回复
zuoErJin 2014-04-24
引用 12 楼 kuqideyupian 的回复:
在iOS 7中,苹果引入了一个新的属性,叫做[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll。当你的容器是navigation controller时,默认的布局将从navigation bar的顶部开始。这就是为什么所有的UI元素都往上漂移了44pt。 修复这个问题的快速方法就是在方法- (void)viewDidLoad中添加如下一行代码: self.edgesForExtendedLayout = UIRectEdgeNone;
无意中看到这个帖子,应该是上移64,而不是44吧
  • 打赏
  • 举报
回复
伦敦iOS小牛 2014-04-17
我的微博里有完整的代码专门解决这个问题的: http://weibo.com/u/2822867275 要用到 Method Swizzling, 什么是MS 我的微博里也有介绍。
  • 打赏
  • 举报
回复
xihayouyi 2014-04-17
楼主的方法解救了我,感谢啊。
  • 打赏
  • 举报
回复
_0筱筱0_ 2013-12-23
反正也没人结贴了....就这样吧 我都懒得回答了.....
  • 打赏
  • 举报
回复
_0筱筱0_ 2013-12-23
引用 13 楼 lkw5657 的回复:
[quote=引用 12 楼 kuqideyupian 的回复:] 在iOS 7中,苹果引入了一个新的属性,叫做[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll。当你的容器是navigation controller时,默认的布局将从navigation bar的顶部开始。这就是为什么所有的UI元素都往上漂移了44pt。 修复这个问题的快速方法就是在方法- (void)viewDidLoad中添加如下一行代码: self.edgesForExtendedLayout = UIRectEdgeNone;
你这个跑题了吧[/quote] 是的 没注意看....哈哈
  • 打赏
  • 举报
回复
lkw5657 2013-12-23
引用 12 楼 kuqideyupian 的回复:
在iOS 7中,苹果引入了一个新的属性,叫做[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll。当你的容器是navigation controller时,默认的布局将从navigation bar的顶部开始。这就是为什么所有的UI元素都往上漂移了44pt。 修复这个问题的快速方法就是在方法- (void)viewDidLoad中添加如下一行代码: self.edgesForExtendedLayout = UIRectEdgeNone;
你这个跑题了吧
  • 打赏
  • 举报
回复
240385033 2013-12-19
那右边这个呢,我右移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];
  • 打赏
  • 举报
回复
_0筱筱0_ 2013-12-19
在iOS 7中,苹果引入了一个新的属性,叫做[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll。当你的容器是navigation controller时,默认的布局将从navigation bar的顶部开始。这就是为什么所有的UI元素都往上漂移了44pt。 修复这个问题的快速方法就是在方法- (void)viewDidLoad中添加如下一行代码: self.edgesForExtendedLayout = UIRectEdgeNone;
  • 打赏
  • 举报
回复
lavzche 2013-11-25
UIBarButtonItem *btnPubPost = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"question24"] style:UIBarButtonItemStyleBordered target:self action:@selector(clickPubPost:)]; self.navigationItem.rightBarButtonItem = btnPubPost; 这样写没有出现位置下移的情况,IOS6和IOS7都没问题
  • 打赏
  • 举报
回复
iXiaXianBing 2013-10-12
引用 8 楼 southbirdfly 的回复:
大概就是下面这样,注意:要用setImage, 不要用setBackgroundImage UIButton *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;
嗯 果然能实现 起初设置了setBackgroundImage的问题 setImage 才对, 细节决定成败。。。 谢了楼主
  • 打赏
  • 举报
回复
southbirdfly 2013-10-12
引用 7 楼 I_am_not_loser 的回复:
[quote=引用 6 楼 southbirdfly 的回复:] [quote=引用 5 楼 I_am_not_loser 的回复:] [quote=引用 3 楼 southbirdfly 的回复:] [quote=引用 2 楼 wyz874485227 的回复:] 我也遇到了同样的问题, 暂时还没有解决, 楼主解决了吗?
用了customerView,然后btn.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0),向左移20个像素,但我感觉好山寨,应该还有其他途径的。。。[/quote] 这样实现不了的吧?山寨不山寨先不说,你确定你已经实现了?[/quote] 已实现,确实可以的。[/quote] 整体的代码贴出来看一下嘛 我试了一下好像没有效果额[/quote] 大概就是下面这样,注意:要用setImage, 不要用setBackgroundImage UIButton *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;
  • 打赏
  • 举报
回复
iXiaXianBing 2013-10-12
引用 6 楼 southbirdfly 的回复:
[quote=引用 5 楼 I_am_not_loser 的回复:] [quote=引用 3 楼 southbirdfly 的回复:] [quote=引用 2 楼 wyz874485227 的回复:] 我也遇到了同样的问题, 暂时还没有解决, 楼主解决了吗?
用了customerView,然后btn.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0),向左移20个像素,但我感觉好山寨,应该还有其他途径的。。。[/quote] 这样实现不了的吧?山寨不山寨先不说,你确定你已经实现了?[/quote] 已实现,确实可以的。[/quote] 整体的代码贴出来看一下嘛 我试了一下好像没有效果额
  • 打赏
  • 举报
回复
southbirdfly 2013-10-11
引用 2 楼 wyz874485227 的回复:
我也遇到了同样的问题, 暂时还没有解决, 楼主解决了吗?
用了customerView,然后btn.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0),向左移20个像素,但我感觉好山寨,应该还有其他途径的。。。
  • 打赏
  • 举报
回复
加载更多回复(5)
发帖
iOS

2.8w+

社区成员

主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
帖子事件
创建了帖子
2013-10-08 05:17
社区公告
暂无公告