iOS导航BarButtonItem文字或者图片与屏幕边界的间隔调整方法
2015-07-17 17:45
701 查看
先谢谢标哥啦 /article/1513932.html
在设置navigationItem的leftBarButtonItem或rightBarButtonItem时,
用CustomView初始化UIBarButtonItem,不论怎么设置CustomView的frame,
添加到导航条上之后总是和屏幕边界有一定的间距(5pix),
如何自由调整这个间距呢?
下面介绍两种方法:
1、不用直接设置rightBartButtonItem而是设置rightBartButtonItems,并且第一个item设置为一个占位。
[objc] view
plaincopyprint?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
- (UIButton *)addRightItemWithTitle:(NSString *)title action:(SEL)action {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
CGSize size = [title sizeWithFont:[UIFont systemFontOfSize:16]];
//! 这里需要根据内容大小来调整宽度
button.frame = CGRectMake(0, 0, size.width <= 10 ? 70 : size.width + 10, 44);
button.titleLabel.textColor = [UIColor whiteColor];
button.titleLabel.font = [UIFont systemFontOfSize:16];
button.titleLabel.textAlignment = NSTextAlignmentRight;
[button setTitle:title forState:UIControlStateNormal];
/**
* width为负数时,相当于btn向右移动width数值个像素,由于按钮本身和边界间距为5pix,所以width设为-15时,间距正好调整
* 为10;width为正数时,正好相反,相当于往左移动width数值个像素
*/
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
target:nil action:nil];
negativeSpacer.width = -15;
[button addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.rightBarButtonItems = @[negativeSpacer, backItem];
return button;
}
2、如果是只有图片,那么通过设置
[button setImageEdgeInsets:UIEdgeInsetsMake(0, -15, 0, -15)];这样也可以调整
[objc] view
plaincopyprint?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
- (UIButton *)addRightItemWithImage:(NSString *)imageName action:(SEL)action {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *image = [UIImage imageNamed:imageName];
button.frame = CGRectMake(0, 0, image.size.width, image.size.height);
// 这里需要注意:由于是想让图片右移,所以left需要设置为正,right需要设置为负。正在是相反的。
// 让按钮图片右移15
[button setImageEdgeInsets:UIEdgeInsetsMake(0, 15, 0, -15)];
[button setImage:image forState:UIControlStateNormal];
[button addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
button.titleLabel.font = [UIFont systemFontOfSize:16];
UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.rightBarButtonItem = rightItem;
return button;
在设置navigationItem的leftBarButtonItem或rightBarButtonItem时,
用CustomView初始化UIBarButtonItem,不论怎么设置CustomView的frame,
添加到导航条上之后总是和屏幕边界有一定的间距(5pix),
如何自由调整这个间距呢?
下面介绍两种方法:
1、不用直接设置rightBartButtonItem而是设置rightBartButtonItems,并且第一个item设置为一个占位。
[objc] view
plaincopyprint?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
- (UIButton *)addRightItemWithTitle:(NSString *)title action:(SEL)action {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
CGSize size = [title sizeWithFont:[UIFont systemFontOfSize:16]];
//! 这里需要根据内容大小来调整宽度
button.frame = CGRectMake(0, 0, size.width <= 10 ? 70 : size.width + 10, 44);
button.titleLabel.textColor = [UIColor whiteColor];
button.titleLabel.font = [UIFont systemFontOfSize:16];
button.titleLabel.textAlignment = NSTextAlignmentRight;
[button setTitle:title forState:UIControlStateNormal];
/**
* width为负数时,相当于btn向右移动width数值个像素,由于按钮本身和边界间距为5pix,所以width设为-15时,间距正好调整
* 为10;width为正数时,正好相反,相当于往左移动width数值个像素
*/
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
target:nil action:nil];
negativeSpacer.width = -15;
[button addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.rightBarButtonItems = @[negativeSpacer, backItem];
return button;
}
2、如果是只有图片,那么通过设置
[button setImageEdgeInsets:UIEdgeInsetsMake(0, -15, 0, -15)];这样也可以调整
[objc] view
plaincopyprint?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
- (UIButton *)addRightItemWithImage:(NSString *)imageName action:(SEL)action {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *image = [UIImage imageNamed:imageName];
button.frame = CGRectMake(0, 0, image.size.width, image.size.height);
// 这里需要注意:由于是想让图片右移,所以left需要设置为正,right需要设置为负。正在是相反的。
// 让按钮图片右移15
[button setImageEdgeInsets:UIEdgeInsetsMake(0, 15, 0, -15)];
[button setImage:image forState:UIControlStateNormal];
[button addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
button.titleLabel.font = [UIFont systemFontOfSize:16];
UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.rightBarButtonItem = rightItem;
return button;
相关文章推荐
- iOS如何把导航默认的返回按钮设置成“返回”
- iOS定位原理和使用建议
- iOS自动处理键盘事件的第三方库:IQKeyboardManager
- 关于使用他人IOS时,遇到缺少 .pch 文件 现象的原因及解决方法
- 一个轻量级iOS安全框架:SSKeyChain
- 一个轻量级iOS安全框架:SSKeyChain
- Ios项目添加Pods
- 文字渐变效果
- iOS 利用Socket UDP协议广播机制的实现
- 提高iOS开发效率的方法和工具
- ios数组基本用法和排序
- IOS 项目中必须避免的几种循环引用的问题
- 分享一些iOS开发的教程
- nagios监控iptables状态(二)
- IOS中的深拷贝与浅拷贝
- 4、iOS传值的方法-Notifaction反向传值
- IOS7 textkit 的相关
- iOS事件拦截及应用
- 3、iOS传值的方法-Notifaction正向传值
- iOS常用加密方法(aes、md5、base64)