- (
void
)initNavigateView{
UIColor
*textColorButtonSelected =
EF_TextColor_TextColorButtonSelected
;
UIButton
* btn= [[
UIButton
alloc
]
initWithFrame
:
CGRectMake
(0, 0, 66, 44)];
[btn
addTarget
:
self
action
:
@selector
(rightAction)
forControlEvents
:
UIControlEventTouchUpInside
];
[btn setTitle : @"保存" forState : UIControlStateNormal ];
[btn setTitleColor :textColorButtonSelected forState : UIControlStateSelected ];
UIBarButtonItem *barBtnItem = [[ UIBarButtonItem alloc ] initWithCustomView :btn];
self . navigationItem . rightBarButtonItem = barBtnItem;
[btn setTitle : @"保存" forState : UIControlStateNormal ];
[btn setTitleColor :textColorButtonSelected forState : UIControlStateSelected ];
UIBarButtonItem *barBtnItem = [[ UIBarButtonItem alloc ] initWithCustomView :btn];
self . navigationItem . rightBarButtonItem = barBtnItem;
}
我们发现,在设置navigationItem的leftBarButtonItem或rightBarButtonItem时,用CustomView初始化UIBarButtonItem,不论怎么设置CustomView的frame,添加到导航条上之后总是和屏幕边界有一定的间距(5pix),如何自由调整这个间距呢?
方法一:
考虑到CustomView一般为UIButton,如果该按钮上面是一个图片,仅为了显示效果,我们可以通过setImage: forState:方法设置button的背景图片(注意这里不是setBackgroundImage: forState:),然后通过setImageEdgeInsets:方法设置按钮图片和按钮各个边界的距离即可。按钮为文字的情况类似,对应的方法是setTitle: forState:和setTitleEdgeInsets:
[
_rightButton
setTitleEdgeInsets
:
UIEdgeInsetsMake
(0,40, 0 , 0)];
方法二:
初始化一个用于控制间距的UIBarButtonItem实例negativeSpacer,并设置negativeSpacer的width属性的值,设为-5的时候,正好可以使按钮与屏幕边界值为0,以rightBarButtonItem情况为例
- UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
//设置frame只能控制按钮的大小 - btn.frame= CGRectMake(0, 0, 40, 44);
- [btn addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside];
- UIBarButtonItem *btn_right = [[UIBarButtonItem alloc] initWithCustomView:btn];
- UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
- initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
- target:nil action:nil];
- // width为负数时,相当于btn向右移动width数值个像素,由于按钮本身和边界间距为5pix,所以width设为-5时,间距正好调整为0;width为正数时,正好相反,相当于往左移动width数值个像素
- negativeSpacer.width = -5;
- self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:negativeSpacer, btn_right, nil nil]; // // //negativeSpacer 和 btn_right 的添加顺序不能变.