前言:

本文由DevDiv社区@Vincent 原创,转载请注明出处!

http://www.devdiv.com/iOS_iPhone-ios_ios_uibarbuttonitem_-thread-206858-1-1.html

问题引入:

iOS7中导航栏按钮图片会有左右偏移,比如leftBarButtonItem可能会向右偏移10几个像素。

解决办法1:

自定义一个Button,代码如下:

1

@interface BarItemButton : UIButton

2

3

@end

实现如下方法:

01

- (UIEdgeInsets)alignmentRectInsets

02

{

03

UIEdgeInsets insets;

04

if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)

05

{

06

if([self isLeftButton])

07

{

08

insets = UIEdgeInsetsMake(0, 13, 0, 0);

09

}

10

else

11

{

12

insets = UIEdgeInsetsMake(0, 0, 0, 13);

13

}

14

}

15

else

16

{

17

insets = UIEdgeInsetsZero;

18

}

19

20

return
insets;

21

}

22

23

- (BOOL)isLeftButton

24

{

25

return
self.frame.origin.x < (self.superview.frame.size.width / 2);

26

}

然后把这样一个Button作为left button,代码如下:

1

UIButton* btn = [BarItemButton buttonWithType:UIButtonTypeCustom];

2

btn.frame = CGRectMake(0, 0, 45, 40);

3

[btn setImage:[UIImage imageNamed:@"come_back.png"] forState:UIControlStateNormal];

4

[btn addTarget:self action:@selector(handleBack:) forControlEvents:UIControlEventTouchUpInside];

5

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn];

这样可以解决问题,但并不完美,

如果我们我们从一个controller跳转到这样一个controller中:

[self.navigationController pushViewController:[[TestViewController alloc] init] animated:YES];

那么你会发现这个left button位置一开始并不正确,然后通过一个动画移动到我们希望的位置上。

大致效果是这样,controller启动时候有一个明显的动画,蓝色的view在移动,而导航栏上的button也在移动

启动完成后button才回到正确的位置,如下图

而这个动画显然不是我们需要的!

解决办法2:

去掉button的alignmentRectInsets方法实现,

将left button设置代码修改如下:

1

self.view.backgroundColor = [UIColor blueColor];

2

UIButton* btn = [BarItemButton buttonWithType:UIButtonTypeCustom];

3

btn.frame = CGRectMake(0, 0, 45, 40);

4

[btn setImage:[UIImage imageNamed:@"come_back.png"] forState:UIControlStateNormal];

5

btn.imageEdgeInsets = UIEdgeInsetsMake(0, -13, 0, 0);

6

[btn addTarget:self action:@selector(handleBack:) forControlEvents:UIControlEventTouchUpInside];

7

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn];

这里最重要是的我们设置了button的imageEdgeInsets,让它在构造的时候就在-13这个位置固定住,而不是layout的时候才移动到我们希望的位置上。

iOS7新特性-完美解决iOS7关于自定义导航条UIBarButtonItem偏移的问题的更多相关文章

  1. IOS7 新特性(针对同样讨厌更新后IOS7的开发者)

    本文转载至 http://blog.csdn.net/hanbing861210/article/details/13614211 您还未登录!|登录|注册|帮助 首页 业界 移动 云计算 研发 论坛 ...

  2. iOS- 给App添加内购& 验证购买iOS7新特性

    1.内购——应用内购买 我所说的内购——也可以说是应用内购买 大家都知道通过苹果应用程序商店有三种主要赚钱的方式: 1.直接收费(与国内大部分用户的消费习惯相悖,如果要收费,直接收高的,别收6块钱) ...

  3. IOS7 新特性

    相关ios7新特性 帖子.挺全的.一定要看看哪 http://www.devdiv.com/iOS_iPhone-ios_ui_uikit_text_kit_-thread-203631-1-1.ht ...

  4. iOS11自定义导航条上移处理

    image.png 在自定义导航条时,通常会继承系统的UINavigationBar,但如上图,在iOS11上,导航条改动了.自定义导航条代码 -(MBNavigationBar *)myNavBar ...

  5. jQuery Mobile 自定义导航条图标

    1.jQuery Mobile 自定义导航条图标

  6. ios7新特性1-UI变化、UIKit动态行为支持与Text Kit新接口

    iOS 7.0新特性1 iOS 7的UI经过了重新设计.另外,iOS7中引入了新的动画系统,便于创建2D和2.5D的游戏.多任务支持提升,点对点通讯以及其他重要的特征使iOS7相对于以往的SDK来说发 ...

  7. ios7新特性实践

    一 iOS 7 新特性:视图控制器切换API 二 iOS 7系列译文:认识 TextKit 三 iOS 7系列译文:iOS7的多任务处理 四 iOS7 最佳实践:一个天气应用案例(上) 五 iOS7 ...

  8. ios7新特性3-Map Kit新特性

    Map Kit 框架 (MapKit.framework) 包含了大量的改进以及为基于地图的程序提供了新特性.利用地图显示位置信息的应用现在可以使用Maps这个程序用到的3D地图,包括控制程序控制视线 ...

  9. React Native中自定义导航条

    这是2017年年初开始的公司的项目,对于导航条的要求很高,Android和iOS上必须用一致的UI,按钮位置还有各种颜色都有要求,而且要适应各种奇葩要求. 尝试了一下当时React Native自带的 ...

随机推荐

  1. CSS Sprites(CSS图像拼合技术)教程、工具集合

    本集合是有一位国外设计师收集整合,并由 oncoding翻译成中文的,感谢他们的辛苦贡献.CSS Sprites技术在国外并不是什么新技术,只不过近两年(尤其08年开始)中国开始流行这个词,大家也开始 ...

  2. SQL Server实现跨库查询(跨库select insert)

    方法一: select  * from servername.dbo.tablename 方法二: select * from OPENDATASOURCE(         'SQLOLEDB',  ...

  3. Dom关于位置和尺寸的api

    parentNode    直接父级//和offsetParent不同 inner2.parentNode <!DOCTYPE html> <html id="html&q ...

  4. css---盒模型新增样式

    box-shadow 以逗号分割列表来描述一个或多个阴影效果,可以用到几乎任何元素上. 如果元素同时设置了 border-radius ,阴影也会有圆角效果.多个阴影时和多个 text shadows ...

  5. Java集合框架(List,Set,Map)

    单列集合基本框架 List接口特点:1. 它是一个元素存取有序的集合.例如,存元素的顺序是11.22.33.那么集合中,元素的存储就是按照11.22.33的顺序完成的). 2. 它是一个带有索引的集合 ...

  6. VBS脚本完美实现开机延时启动

    目录 概述 vbs内容示例: vbs示例语句分析 自定义vbs脚本 一些问题和解决方法   概述 系统开机时,顺带自动启动了不少驱动程序,使得电脑开机后鼠标要呆滞许久.为了加快windows的开机速度 ...

  7. 锁定文件失败 打不开磁盘“D:\vms\S1\CentOS 64 位.vmdk”或它所依赖的某个快照磁盘(强制关机后引起的问题)

    电脑强制关机后,centos系统启动失败,报异常:锁定文件失败 打不开磁盘“D:\vms\S1\CentOS 64 位.vmdk”或它所依赖的某个快照磁盘.解决办法:进入D:\vms\S1目录,删除下 ...

  8. HTML5能取代Android和iOS应用程序吗?

    大量新生移动设备的兴起,改变了互联网的未来.在技术的发展上,HTML5会取代App应用吗?或者说能够在多大程度上取代呢?在HTML5规范中,已经加入了相机.磁力罗盘.GPS信息的支持.很多新兴浏览器也 ...

  9. VS2010-MFC(对话框:文件对话框)

    转自:http://www.jizhuomi.com/software/173.html 一 文件对话框的分类       文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中 ...

  10. PAT甲级——A1117 Eddington Number【25】

    British astronomer Eddington liked to ride a bike. It is said that in order to show off his skill, h ...