【发布时间】:2015-05-21 20:46:26
【问题描述】:
我正在尝试使用 UINavigationItem setLeftBarButtonItem 和 setRightBarButtonItem
以编程方式创建标准导航栏我想要一个看起来像的 NavigationItem
[ < BACKTEXT FWDTEXT > ]
我希望我的图像(箭头)和设备边缘之间有一个恒定的空间。 我还希望图像和文本之间有一个恒定的空间。
我在 UIBarButtonItem 上创建了一个类别,并添加了两个方法 backButtonWith 和 fwdButtonWith
我读了@Split useful answer,它解释了如何解决右键问题
button.titleEdgeInsets = UIEdgeInsetsMake(0, - button.imageView.frame.size.width, 0, button.imageView.frame.size.width);
button.imageEdgeInsets = UIEdgeInsetsMake(0, button.titleLabel.frame.size.width, 0, -button.titleLabel.frame.size.width);
但我很难解决后退按钮。
这是我的代码
- (UIBarButtonItem *)buttonWith:(BOOL) directionLeft title:(NSString *)title image:(UIImage *) buttonImage tintColor:(UIColor *)color target:(id)target andAction:(SEL)action{
UIButton *barButton;
barButton = [UIButton buttonWithType:UIButtonTypeCustom];
float buttonWidth = 130.0f;
[barButton setFrame:CGRectMake(0, 0, buttonWidth, 20.5f)];
[barButton setTitle:title forState:UIControlStateNormal];
[barButton setTitleColor:color forState:UIControlStateNormal];
const CGFloat* components = CGColorGetComponents(color.CGColor);
[barButton setTitleColor:[UIColor colorWithRed:components[0] green:components[1] blue:components[2] alpha:0.3f] forState:UIControlStateHighlighted];
UIEdgeInsets titleEdgeInsets;
UIEdgeInsets imageEdgeInsets;
UIImage *image = [self image:buttonImage tintedWithColor:color fraction:0.0];
[barButton setImage:image forState:UIControlStateNormal];
[barButton setImage:[self image:image byApplyingAlpha:0.3] forState:UIControlStateHighlighted];
[barButton addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
if(directionLeft == YES){
titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);//THIS PARAMS SHOULD BE CONFIGURED
imageEdgeInsets = UIEdgeInsetsMake(0,0,0,0);
}else{
titleEdgeInsets = UIEdgeInsetsMake(0, -barButton.imageView.frame.size.width, 0, barButton.imageView.frame.size.width);
imageEdgeInsets = UIEdgeInsetsMake(0, barButton.titleLabel.frame.size.width, 0, -barButton.titleLabel.frame.size.width);
}
barButton.imageEdgeInsets = imageEdgeInsets;
barButton.titleEdgeInsets = titleEdgeInsets;
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:barButton];
return barButtonItem;
}
【问题讨论】:
标签: ios uinavigationbar uibarbuttonitem