navigationItem.leftBarButtonItem的图片宽度怎么调整整

查看: 6364|回复: 15
[DEVDIV原创]
精华67在线时间16652 小时帖子主题UID1积分398850技术分132914 资源分19602 分享激情125116 博客好友记录相册
首席研究员
UID1积分398850
本文由DevDiv社区 原创,转载请注明出处!
问题引入:
iOS7中导航栏按钮图片会有左右偏移,比如leftBarButtonItem可能会向右偏移10几个像素。
解决办法1:
自定义一个Button,代码如下:
@interface BarItemButton : UIButton
实现如下方法:
- (UIEdgeInsets)alignmentRectInsets
& & UIEdgeI
& & if([[[UIDevice currentDevice] systemVersion] floatValue] &= 7.0)
& && &&&if([self isLeftButton])
& && && && &insets = UIEdgeInsetsMake(0, 13, 0, 0);
& && &&&else
& && && && &insets = UIEdgeInsetsMake(0, 0, 0, 13);
& && &&&insets = UIEdgeInsetsZ
- (BOOL)isLeftButton
& & return self.frame.origin.x & (self.superview.frame.size.width / 2);
然后把这样一个Button作为left button,代码如下:
& & UIButton* btn = [BarItemButton buttonWithType:UIButtonTypeCustom];
& & btn.frame = CGRectMake(0, 0, 45, 40);
& & [btn setImage:[UIImage imageNamed:@&come_back.png&] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(handleBack:) forControlEvents:UIControlEventTouchUpInside];
& & self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
这样可以解决问题,但并不完美,
如果我们我们从一个controller跳转到这样一个controller中:
[self.navigationController pushViewController:[[TestViewController alloc] init] animated:YES];
那么你会发现这个left button位置一开始并不正确,然后通过一个动画移动到我们希望的位置上。
大致效果是这样,controller启动时候有一个明显的动画,蓝色的view在移动,而导航栏上的button也在移动
10:43:44 上传
启动完成后button才回到正确的位置,如下图
10:43:44 上传
而这个动画显然不是我们需要的!
解决办法2:
去掉button的alignmentRectInsets方法实现,
将left button设置代码修改如下:
&&self.view.backgroundColor = [UIColor blueColor];
& & UIButton* btn = [BarItemButton buttonWithType:UIButtonTypeCustom];
& & btn.frame = CGRectMake(0, 0, 45, 40);
& & [btn setImage:[UIImage imageNamed:@&come_back.png&] forState:UIControlStateNormal];
& & btn.imageEdgeInsets = UIEdgeInsetsMake(0, -13, 0, 0);
& & [btn addTarget:self action:@selector(handleBack:) forControlEvents:UIControlEventTouchUpInside];
& & self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
这里最重要是的我们设置了button的imageEdgeInsets,让它在构造的时候就在-13这个位置固定住,而不是layout的时候才移动到我们希望的位置上。
Don’t panic!
精华3在线时间4 小时帖子主题UID33079积分2035技术分1045 资源分70 分享激情338 博客好友记录相册
知府, 积分 2035, 距离下一级还需 2965 积分
UID33079积分2035
精华0在线时间28 小时帖子主题UID357031积分506技术分30 资源分59 分享激情125 博客好友记录相册
实习工程师
知县, 积分 506, 距离下一级还需 494 积分
UID357031积分506
正在纠结这个问题呢。
精华0在线时间43 小时帖子主题UID1946积分52503技术分29680 资源分1082 分享激情13293 博客好友记录相册
高级架构师
UID1946积分52503
精华0在线时间73 小时帖子主题UID304390积分4012技术分1155 资源分114 分享激情1644 博客好友记录相册
知府, 积分 4012, 距离下一级还需 988 积分
UID304390积分4012
精华0在线时间299 小时帖子主题UID34积分13800技术分939 资源分1648 分享激情1652 博客好友记录相册
实习工程师
总督, 积分 13800, 距离下一级还需 6200 积分
UID34积分13800
精华0在线时间45 小时帖子主题UID330668积分2568技术分455 资源分263 分享激情560 博客好友记录相册
实习工程师
知府, 积分 2568, 距离下一级还需 2432 积分
UID330668积分2568
精华0在线时间110 小时帖子主题UID289165积分1253技术分863 资源分8 分享激情40 博客好友记录相册
实习工程师
知府, 积分 1253, 距离下一级还需 3747 积分
UID289165积分1253
这个方法是解决按钮图片的偏移,按钮的背景图片的偏移如何弄呢?
精华0在线时间507 小时帖子主题UID252065积分10621技术分6033 资源分104 分享激情2089 博客好友记录相册
UID252065积分10621
我之前就是用第二个方法解决的。&&不知道有没有更好的解决办法。&&因为有的时候,看图片位置会按的不准确。
◆◇ヽ    對于:[ 友情 、愛情 .] 如同Somnus 1 樣,短暫美麗卻又致命 ╮
精华0在线时间463 小时帖子主题UID314479积分13416技术分1610 资源分1578 分享激情2286 博客好友记录相册
总督, 积分 13416, 距离下一级还需 6584 积分
UID314479积分13416
精华0在线时间25 小时帖子主题UID305503积分357技术分40 资源分22 分享激情111 博客好友记录相册
实习工程师
县丞, 积分 357, 距离下一级还需 143 积分
UID305503积分357
本人的解决方式与楼主略有不同,直接上代码,有不同意见的朋友直接@我,
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
& & backButton.frame= CGRectMake(0, 0, 45, 44);
& & [backButton setBackgroundImage:[UIImage imageNamed:@&back1__&] forState:UIControlStateNormal];
& & [backButton setBackgroundImage:[UIImage imageNamed:@&back2__&] forState:UIControlStateHighlighted];
& & [backButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
& & UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
& & UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
& && && && && && && && && && && && && &initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
& && && && && && && && && && && && && &target:nil action:nil];
& & negativeSpacer.width = -10;
& & self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:negativeSpacer, backButtonItem, nil];
总评分:&资源分 + 1&
精华0在线时间25 小时帖子主题UID305503积分357技术分40 资源分22 分享激情111 博客好友记录相册
实习工程师
县丞, 积分 357, 距离下一级还需 143 积分
UID305503积分357
本人解决方案
& & UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
& & backButton.frame= CGRectMake(0, 0, 45, 44);
& & [backButton setBackgroundImage:[UIImage imageNamed:@&back1__&] forState:UIControlStateNormal];
& & [backButton setBackgroundImage:[UIImage imageNamed:@&back2__&] forState:UIControlStateHighlighted];
& & [backButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
& & UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
& & UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
& && && && && && && && && && && && && &initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
& && && && && && && && && && && && && &target:nil action:nil];
& & negativeSpacer.width = -10;
& & self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:negativeSpacer, backButtonItem, nil];
精华0在线时间25 小时帖子主题UID305503积分357技术分40 资源分22 分享激情111 博客好友记录相册
实习工程师
县丞, 积分 357, 距离下一级还需 143 积分
UID305503积分357
houlf 发表于
这个方法是解决按钮图片的偏移,按钮的背景图片的偏移如何弄呢?
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
& & backButton.frame= CGRectMake(0, 0, 45, 44);
& & [backButton setBackgroundImage:[UIImage imageNamed:@&back1__&] forState:UIControlStateNormal];
& & [backButton setBackgroundImage:[UIImage imageNamed:@&back2__&] forState:UIControlStateHighlighted];
& & [backButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
& & UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
& & UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
& && && && && && && && && && && && && &initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
& && && && && && && && && && && && && &target:nil action:nil];
& & negativeSpacer.width = -10;
& & self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:negativeSpacer, backButtonItem, nil];
试试这个方法,我自己一直在用,没什么问题
精华0在线时间4 小时帖子主题UID355313积分49技术分25 资源分0 分享激情15 博客好友记录相册
实习工程师
县主薄, 积分 49, 距离下一级还需 51 积分
UID355313积分49
正好要用到,
精华0在线时间2 小时帖子主题UID358431积分48技术分30 资源分0 分享激情10 博客好友记录相册
实习工程师
县主薄, 积分 48, 距离下一级还需 52 积分
UID358431积分48
janck001 发表于
本人的解决方式与楼主略有不同,直接上代码,有不同意见的朋友直接@我,
UIButton *backButton = ;
好用。。。
精华0在线时间1 小时帖子主题UID363140积分52技术分20 资源分1 分享激情20 博客好友记录相册
实习工程师
县主薄, 积分 52, 距离下一级还需 48 积分
UID363140积分52
一级王者勋章
一级王者勋章
DEVDIV博主
十级贡献勋章
十级贡献勋章
九级光辉勋章
九级光辉勋章
八级荣誉勋章
八级荣誉勋章
七级卓越勋章
七级卓越勋章
六级尊贵勋章
六级尊贵勋章
三级英豪勋章
三级英豪勋章
四级英才勋章
四级英才勋章
五级至尊勋章
五级至尊勋章
DEVDIV人才
及时将最新信息发给我
通过Email及时将最新的模板和服务发给我。
及时了解我们最新动态。关注我们的微博
官方微博: &&&
Powered by
& 2010 - 2016Swift_ios_开发之UINavigationController的常用属性那些事 - 简书
下载简书移动应用
写了16430字,被88人关注,获得了106个喜欢
Swift_ios_开发之UINavigationController的常用属性那些事
1.导航栏是否隐藏
self.navigationController?.navigationBar.hidden = false
2.导航栏的最底部颜色设置
//backgroundColor 是最底下的color
self.navigationController?.navigationBar.backgroundColor = UIColor.redColor()
3.导航栏的表层颜色,即首先看到的颜色
//barTintColor 是表层颜色
self.navigationController?.navigationBar.barTintColor = UIColor.grayColor()
4.导航栏中间标题title的颜色,大小,字体设置
self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.blueColor(),NSFontAttributeName:UIFont(name: "Heiti SC", size: 24.0)!]
5.导航栏隐藏左边backitem,即leftbarbuttonitem
//完全隐藏backItem//
self.navigationItem.setHidesBackButton(true, animated: true)
6.导航栏leftbarbuttonitem的颜色设置
swiftself.navigationController?.navigationBar.tintColor = UIColor.whiteColor()
7.导航栏leftbarbuttonitem的字体,颜色,大小设置
self.navigationItem.leftBarButtonItem?.setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.blueColor(),NSFontAttributeName: UIFont(name: "Chalkduster", size: 13)!], forState: UIControlState.Normal)
8.导航栏重新定义leftbarbuttonitem
//重新定义backItem,将覆盖原来的BackItem.与storyboard中拖入一个item,效果一样。都是覆盖原来的backitem。
//第一种代码定义方式
self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: "function"), animated: true)
//第二种代码定义方式
self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: "function")
//第三种代码定义的方式
self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(title: "&Grandre", style: UIBarButtonItemStyle.Plain, target: self, action: "function"), animated: true)
9.导航栏设置成透明
//将导航栏设置成透明
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
self.navigationController!.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.translucent = true
如果对你有帮助,记得mark一下哦!
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
简书程序员大本营
投稿须知:
1.本专题仅收录与程序有关的文章。
2.请在代码框里写代码,尽量保证可看性。
· 69446人关注
专题内容主要包括swift开发的内容。
Objective-C的可以关注下我的另一个专题:
iOS开发技巧(http...
· 436人关注
学习Swift经验分享,以及互相学习与讨论。
· 111人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:[ios]不能调整间距时分配给 navigationItem.rightBarButtonItems UIBarButtonItem(s)
这是一个奇怪的问题。
这种情况是我想调整我 UIBarButtonItem(s) 之间的间距,以便它们分开只是 2 像素为单位)。
我能够很容易地做到这与 UIToolbar:
// Make bottom button bar buttons
NSMutableArray *bottomButtons = [[NSMutableArray alloc] initWithCapacity:3];
// Create spacer between buttons
UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[bottomButtons addObject:spacer];
UIBarButtonItem* noSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
noSpace.width = -10;
// Add button 1
self.addAlbumButton = [UIGlossyButton
buttonWithType:UIButtonTypeCustom];
[self.addAlbumButton setTitle:@"Button 1" forState:UIControlStateNormal];
[self.addAlbumButton addTarget:self action:@selector(addAlbum:) forControlEvents:UIControlEventTouchUpInside];
self.addAlbumBarButton = [[UIBarButtonItem alloc] initWithCustomView:self.addAlbumButton];
[bottomButtons addObject:self.addAlbumBarButton];
[bottomButtons addObject:noSpace];
// Add button2
self.downloadAllItemsButton = [UIGlossyButton
buttonWithType:UIButtonTypeCustom];
[self.downloadAllItemsButton setTitle:@"Button 2" forState:UIControlStateNormal];
[self.downloadAllItemsButton addTarget:self action:@selector(downloadAllItemsAction:) forControlEvents:UIControlEventTouchUpInside];
self.downloadAllItemsBarButton = [[UIBarButtonItem alloc] initWithCustomView:self.downloadAllItemsButton];
[bottomButtons addObject:self.downloadAllItemsBarButton];
// add all button to bottom toolbar
[self.bottomToolbar setItems:bottomButtons];
问题是当我尝试用导航栏中做到这一点。出于某些原因,当我插入固定的长度的按钮 (负值),它也不能缩小按钮之间的空间。我知道那里是固定的长度的按钮和工作,因为如果将宽度更改为一个正数,在按钮之间的间距增加。
代码基本上是相同的除了之外,而不将这些按钮添加到 self.bottomToolbar,叫下面的代码:
self.navigationItem.rightBarButtonItems = bottomB
我找到了 MasterViewController 的同样问题。我使用的 splitviewcontroller 和底部工具栏工作正常,但顶部工具栏出现相同的间距问题。这一问题,是我不能小于默认值按钮之间的间距。
好像 navigationItem.rightBarButtonItems 的工作方式不同比所有其他工具栏。
解决方法 1:
将在所有 navigationButtonItem 都添加到数组后你可以做到像以下列方式。我想这将帮助您还因为这工作对我来说,如果您想要更改按钮之间的空间您可以更改它的宏的帮助
#define ONE_BUTTON_WIDTH 30.0f
#define SPACE_BETWEEN_BUTTONS 12.0f
#define ONE_BUTTON_TOTAL_WIDTH (ONE_BUTTON_WIDTH + SPACE_BETWEEN_BUTTONS)
#define kBookmarksImage [UIImage imageNamed:@"bookmarks.png"]
/* CREATE BOOKMARKS BUTTON */
UIButton *bookmarksButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, kBookmarksImage.size.width, kBookmarksImage.size.height)];
[bookmarksButton setImage:kBookmarksImage forState:UIControlStateNormal];
[bookmarksButton addTarget:target action:@selector(toolbarButtonTapped:) forControlEvents:UIControlEventTouchDown];
bookmarksButton.tag = kBookmarksButtonT
UIBarButtonItem *bookmarksButtonItem = [[UIBarButtonItem alloc] initWithCustomView:bookmarksButton];
UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
spacer.width = SPACE_BETWEEN_BUTTONS;
[buttons addObjectsFromArray:@[bookmarksButtonItem,spacer]];
/* ADD ALL THESE BUTTONS TO CUSTOM TOOLBAR AND TOOLBAR TO NAVIGATION BAR */
UIToolbar *customToolbar = [[UIToolbar alloc]
initWithFrame:CGRectMake(0.0f, 0.0f, ([bottomButtons count]/2*ONE_BUTTON_TOTAL_WIDTH), 44.01f)]; // 44.01 shifts it up 1px for some reason
customToolbar.clearsContextBeforeDrawing = NO;
customToolbar.clipsToBounds = NO;
customToolbar.tintColor = [UIColor colorWithWhite:0.305f alpha:0.0f]; // closest I could get by eye to black, translucent style.
customToolbar.barStyle = -1; // clear background
[customToolbar setItems: bottomButtons animated:NO];
UIBarButtonItem *customUIBarButtonitem = [[UIBarButtonItem alloc] initWithCustomView:customToolbar];
self.navigationItem.rightBarButtonItem = customUIBarB

我要回帖

更多关于 图片宽度怎么调整 的文章

 

随机推荐