在常見iOS開發中,我們常遇到這樣的需求,如下:
我們需要自定義導航欄右側按鈕,常見的自定義包裝按鈕如下:
//設置rightItem;
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0, 0, 40, 30);
btn.selected = NO;
[btn setTitle:@"管理" forState:UIControlStateNormal];
[btn setTitle:@"取消" forState:UIControlStateSelected];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(tap:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *rightItem = [[UIBarButtonItem alloc]initWithCustomView:btn];
[self.navigationItem setRightBarButtonItem:rightItem];
但通過這個方法,我們往往是不能調整自定義出來的UIview距離屏幕邊界的方法,對於一些比價坑*的產品經理來說,這遠遠不能達不到他們那顆裝*的心,這個時候我們只能通過如下方法來調整整個個customView距離右邊邊界的值:
//設置rightBarBtnItem樣式:
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0, 0, 100, 30);
[btn setImage:[UIImage imageNamed:@"rightUp"] forState:UIControlStateNormal];
[btn setTitle:@"推薦獎勵" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal];
btn.titleLabel.font = [UIFont systemFontOfSize: 15.0];
btn.titleLabel.textAlignment = NSTextAlignmentRight;
[btn setTitleEdgeInsets:UIEdgeInsetsMake(0, 10, 0, 0)];
UIBarButtonItem *rewardItem = [[UIBarButtonItem alloc]initWithCustomView:btn];
UIBarButtonItem *spaceItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
spaceItem.width = -15;
[btn addTarget:self action:@selector(pushToReward) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.rightBarButtonItems = @[spaceItem,rewardItem];
注意:這里着重強調的是給rightBarButtonItems弄成了一個數組,給它增加了一個spaceItem元素,用來控制customView距離右邊的間距,本身rightBarButtonItem中包裝的button距離它父控件,也就是rightBarButtonItem的值是5,當我們把width設置為-15后,相當於把整個rightBarButtonItem向右移動了10,對於特殊需求,可自行去調整.