使用图片方式自定义iOS导航栏navigationItem的backBarButtonItem
2015-04-26 00:20
513 查看
在做ViewControlller的navigationItem时,我们经常需要使用自定义的图片来替换系统默认的按钮样式,这点在对普通导航项,比如leftBarButtonItem或rightBarButtonItem来说还是比较简单的,通过UIBarButtonItem的setImage设置做好的图片按钮,然后再通过
去掉默认的背景image就可以了。但是如果是想自定义特殊的backBarButtonItem就比较麻烦了,直接使用和普通item一样的方法,会发现根本没有效果,这是因为就算同为UIBarButtonItem,back方式的处理也是和一般的不一样的,api里专门提供了一套setBackButtonXXX的api,如setBackButtonBackgroundImage来提供给UIBarButtonItem用作back
button时的参数设置,虽然也有setBackButtonBackgroundImage可以用,但是替换完会发现图片被以局部拉伸平铺的方式适应了按钮的大小,这样如果你的图片按钮可以这么做,比如和默认效果累死,只是换个颜色,换个边框,或者甚至是也支持这种局部拉伸平铺的做法,就还好说,调整一下拉伸范围参数就可以了,但是如果是固定图形,不像自适应拉伸的话就比较麻烦了,本人试了几种操作组合,发现不是需要去掉button title就是背景重叠,各种效果不对。这时看到有人说自定义backBarButtonItem确实比较麻烦,建议可以以hide的方式隐藏默认返回按钮,同时配合leftBarButtonItem样式和自定义响应函数中调用navigation的pop来实现类似效果,这种方法虽然确实可行,但是总感觉有默认的行为(而且当前页的back实际是显示在导航切换到的下一页上的,直接替换还要考虑这点!)不用而自己模拟替代这样不是很妥,于是又查找了一些资料,终于找到了可以在不缩放图片,不去掉title的前提下,替换backBarButton图片的方法:
原理很简单,第一行加载图片,第二行以加载图片的宽度结合resizableImageWithCapInsets生成一个缩放时不会拉伸的新图片作为BackButtonBackgroundImage,再在第三行设置title的位置偏移到一个不可见的位置,达到隐藏的目的。另外,如果需要全部统一替换,也可以在app的didFinishLaunching里通[UIBarButtonItem appearance]全部统一替换!
1 | [item setBackgroundImage:[UIImage new ] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; |
button时的参数设置,虽然也有setBackButtonBackgroundImage可以用,但是替换完会发现图片被以局部拉伸平铺的方式适应了按钮的大小,这样如果你的图片按钮可以这么做,比如和默认效果累死,只是换个颜色,换个边框,或者甚至是也支持这种局部拉伸平铺的做法,就还好说,调整一下拉伸范围参数就可以了,但是如果是固定图形,不像自适应拉伸的话就比较麻烦了,本人试了几种操作组合,发现不是需要去掉button title就是背景重叠,各种效果不对。这时看到有人说自定义backBarButtonItem确实比较麻烦,建议可以以hide的方式隐藏默认返回按钮,同时配合leftBarButtonItem样式和自定义响应函数中调用navigation的pop来实现类似效果,这种方法虽然确实可行,但是总感觉有默认的行为(而且当前页的back实际是显示在导航切换到的下一页上的,直接替换还要考虑这点!)不用而自己模拟替代这样不是很妥,于是又查找了一些资料,终于找到了可以在不缩放图片,不去掉title的前提下,替换backBarButton图片的方法:
1 | UIImage* image = [UIImage imageNamed: @"back_button.png" ]; |
2 | [item setBackButtonBackgroundImage:[image resizableImageWithCapInsets:UIEdgeInsetsMake(0, image.size.width, 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; |
3 | [item setBackButtonTitlePositionAdjustment:UIOffsetMake(-400.f, 0) forBarMetrics:UIBarMetricsDefault]; |
4 | self .navigationItem.backBarButtonItem = item; |
相关文章推荐
- 使用图片方式自定义iOS导航栏navigationItem的backBarButtonItem
- 使用图片方式自定义iOS导航栏navigationItem的backBarButtonItem
- 自定义iOS的Back按钮(backBarButtonItem)和pop交互手势(interactivepopgesturerecognizer)
- iOS 自定义backBarButtonItem leftBarButtonItem
- 自定义iOS的Back按钮(backBarButtonItem)和pop交互手势(interactivepopgesturerecognizer)
- 自定义iOS的Back按钮(backBarButtonItem)和pop交互手势(interactivepopgesturerecognizer)
- 使用图片方式自定义iOS导航栏navig…
- 自定义iOS的Back按钮(backBarButtonItem)和pop交互手势(interactivepopgesturerecognizer)
- iOS自定义backBarButtonItem的点击事件
- 【转】自定义iOS的Back按钮(backBarButtonItem)和pop交互手势(interactivepopgesturerecognizer) --- 不错
- IOS 返回事件 UIBarButtonItem (一) 自定义backBarButtonItem
- IOS 返回事件 UIBarButtonItem (二) 自定义backBarButtonItem
- iOS-拦截导航栏backBarButtonItem事件
- 最简单的push设置自定义backBarButtonItem(文字、图片、图文)
- ios 对于修改navigationItem的颜色和系统自带的navigationItem的rightBarButtonItem的颜色的问题
- 自定义backBarButtonItem
- iOS-替换系统backBarButtonItem的返回二字
- 【IOS】leftBarButtonItem与backBarButtonItem的区别
- IOS navigationItem 设置返回button,title图片和rightBarButtonItem
- iOS系统导航栏设置leftBarButtonItem和rightBarButtonItem的位置