果然還是simple,之前為了不自定義navigationItem而純修改文本顏色搞了一波(http://www.reibang.com/p/38600293be61)
開始覺得還好,其實仔細一看會發(fā)現(xiàn)字體顯粗了,大概重新繪制了字體文本導致的虚婿,所以還是寫個分類什么的,或者灶壶,你猜?
1、下面先用分類的方式實現(xiàn)自定義文本導航和圖片導航UIBarButtonItem+Extension.h
/**
* 封裝一個圖片item公共項
*
* @param target 對應的控制器
* @param action 點擊事件
* @param image 正常下圖片
* @param hightImage 點擊時圖片
*
* @return UIBarButtonItem item
*/
+(UIBarButtonItem *)itemWithAction:(id)target action:(SEL)action imageName:(NSString *)image highImageName:(NSString *)hightImage
{
//自定義一個按鈕
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
[btn setBackgroundImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:hightImage] forState:UIControlStateHighlighted];
btn.size= btn.currentBackgroundImage.size;
return [[UIBarButtonItem alloc]initWithCustomView:btn];
}
/**
* 封裝一個文本item公共項
*
* @param target 對應的控制器
* @param action 點擊事件
* @param title item文本
* @param normalColoc 文本默認顏色
*
* @return UIBarButtonItem item
*/
+(UIBarButtonItem *)itemWithTitleAction:(id)target action:(SEL)action title:(NSString *)title normalColoc:(UIColor *)normalColoc
{
//自定義一個按鈕
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
[btn setTitle:title forState:UIControlStateNormal];
[btn setTitleColor:normalColoc forState:UIControlStateNormal];
//[btn setTitleColor:[UIColor grayColor] forState:UIControlStateHighlighted];
btn.titleLabel.font = [UIFont systemFontOfSize:16];
CGSize titleSize = [title suggestedSizeWithFont:btn.titleLabel.font];
btn.frame = (CGRect){{0,0}, titleSize};
return [[UIBarButtonItem alloc]initWithCustomView:btn];
}
2祝蝠、當然延塑,當我們實現(xiàn)了基本的效果绣张,OK,看起來確實還不錯关带,但是細心的童鞋就會發(fā)現(xiàn)侥涵,無論在左側(cè)還是右側(cè),文字或者圖標都會相對比系統(tǒng)默認的間距要遠離邊緣宋雏,如果你是潔癖佬或者你的交互設計師視覺設計師是芜飘,這時候可能要考慮一下對間距的控制了:
所以我在另一個分類對此做一個控制UINavigationItem+marginOffset.h
- (void)addLeftBarButtonItem:(UIBarButtonItem *)_leftBarButtonItem
{
UIBarButtonItem *spaceButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
spaceButtonItem.width = -3;
if (DIOS7_Later) {
spaceButtonItem.width = -14;
}
if (_leftBarButtonItem) {
[self setLeftBarButtonItems:@[spaceButtonItem, _leftBarButtonItem]];
} else {
[self setLeftBarButtonItems:@[spaceButtonItem]];
}
}
- (void)addRightBarButtonItem:(UIBarButtonItem *)_rightBarButtonItem
{
UIBarButtonItem *spaceButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
spaceButtonItem.width = -8;
if (DIOS7_Later) {
spaceButtonItem.width = -16;
}
if (_rightBarButtonItem)
{
[self setRightBarButtonItems:@[spaceButtonItem, _rightBarButtonItem]];
}
else
{
[self setRightBarButtonItems:@[spaceButtonItem]];
}
}
3、當然如果你覺得你想自定義自己的間距磨总,改變一下參數(shù)設置就可以了:
- (void)addLeftBarButtonItem:(UIBarButtonItem *)_leftBarButtonItem marginOffset_iOS6:(CGFloat)marginOffset_iOS6 marginOffset_iOS7orLater:(CGFloat)marginOffset_iOS7orLater
{
UIBarButtonItem *spaceButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
spaceButtonItem.width = marginOffset_iOS6;
if (DIOS7_Later) {
spaceButtonItem.width = marginOffset_iOS7orLater;
}
if (_leftBarButtonItem) {
[self setLeftBarButtonItems:@[spaceButtonItem, _leftBarButtonItem]];
} else {
[self setLeftBarButtonItems:@[spaceButtonItem]];
}
}
- (void)addRightBarButtonItem:(UIBarButtonItem *)_rightBarButtonItem marginOffset_iOS6:(CGFloat)marginOffset_iOS6 marginOffset_iOS7orLater:(CGFloat)marginOffset_iOS7orLater;
{
UIBarButtonItem *spaceButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
spaceButtonItem.width = marginOffset_iOS6;
if (DIOS7_Later) {
spaceButtonItem.width = marginOffset_iOS7orLater;
}
if (_rightBarButtonItem)
{
[self setRightBarButtonItems:@[spaceButtonItem, _rightBarButtonItem]];
}
else
{
[self setRightBarButtonItems:@[spaceButtonItem]];
}
}
4嗦明、當然事實上,這些間距的問題只會在iOS6+才會出現(xiàn)的舍败,如果你潔癖得還不夠過癮招狸,可以 將上面修改間距的四個方法包在這段代碼里面:
if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1
endif
5、當然如果從頁面結構角度去操作代碼邻薯,可以考慮在基類里面寫一個初始化導航欄的復寫方法
- (void)initNavBarLeftBtnWithNormalImage:(NSString *)normalImage highlightedImage:(NSString *)highlightedImage target:(id)target action:(SEL)action
{
UIButton *leftButton = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, 44, 44)];
[leftButton setImage:[UIImage imageNamed:normalImage] forState:UIControlStateNormal];
[leftButton setImage:[UIImage imageNamed:highlightedImage] forState:UIControlStateHighlighted];
[leftButton addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *leftButtonItem = [[UIBarButtonItem alloc] initWithCustomView:leftButton];
[self.navigationItem addLeftBarButtonItem:leftButtonItem];
}
- (void)initNavBarLeftBtnWithNormalImage:(NSString *)normalImage highlightedImage:(NSString *)highlightedImage target:(id)target action:(SEL)action marginOffset_iOS6:(CGFloat)marginOffset_iOS6 marginOffset_iOS7orLater:(CGFloat)marginOffset_iOS7orLater
{
UIButton *leftButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 80, 44)];
leftButton.imageEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0);
[leftButton setImage:[UIImage imageNamed:normalImage] forState:UIControlStateNormal];
[leftButton setImage:[UIImage imageNamed:highlightedImage] forState:UIControlStateHighlighted];
[leftButton addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *leftButtonItem = [[UIBarButtonItem alloc] initWithCustomView:leftButton];
[self.navigationItem addLeftBarButtonItem:leftButtonItem marginOffset_iOS6:marginOffset_iOS6 marginOffset_iOS7orLater:marginOffset_iOS7orLater];
}