UIButtonBarItem看起来不对

时间:2013-06-07 21:48:46

标签: ios uibutton uinavigationbar

我认为这将是一个愚蠢的问题,但我似乎无法找到答案。我有一些简单的代码行可以在导航栏中添加一个按钮:

UIBarButtonItem *cancelButton=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"button-cancel.png"] style:UIBarButtonItemStylePlain target:self action:@selector(cancelPressed:)];
UINavigationItem *item = [[UINavigationItem alloc] init];
item.leftBarButtonItem = cancelButton;
item.hidesBackButton = YES;
[self.navigationBar pushNavigationItem:item animated:NO];

此按钮工作正常,但它看起来像这样: enter image description here

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

您可能希望使用自定义视图创建条形按钮项,其中自定义视图为UIButton

UIImage *cancelImage = [UIImage imageNamed:@"button-cancel"];
UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
cancelButton.frame = (CGRect){CGPointZero, cancelImage.size);
[cancelButton setImage:cancelImage forState:UIControlStateNormal];
UIBarButtonItem *cancelBarButton = [[UIBarButtonItem alloc] initWithCustomView:cancelButton];

答案 1 :(得分:0)

根据button-cancel.png的大小设置按钮(cancelButton)大小。

stopButton.frame = CGRectMake();

答案 2 :(得分:0)

而是使用您的图片创建自定义类型UIButton。将UI按钮的目标和选择器设置为您希望条形按钮项目执行的操作。然后按如下方式初始化条形按钮项目:

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];

使用所需图像的按钮是您的UIButton。

答案 3 :(得分:0)

UIBarButtonItem/initWithImage:通常用于制作标志性按钮 - 而不是带有文字的按钮。

如果您只想更改常见文字UIBarButtonItem的外观,则只需设置条形按钮项的背景图片即可。这样,您就不必拥有包含按钮文本的每个按钮的图像。

文档:- (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics

您还可以通过调用UIBarButtonItem外观代理上的setBackgroundImage来设置此应用范围。

最后,请注意,您可能需要创建一个可调整大小的图像以传递给setBackgroundImage。这将使您的单个图像适应任何按钮大小。请参阅UIImage/resizeableImageWithCapInsets:resizingMode:(iOS6)或UIImage/stretchableImageWithLeftCapWidth:topCapHeight:(iOS6之前)

你当然可以做@Wain建议但有缺点。首先,您的按下处理程序将不再发送UIBarButtonItem作为“发送者”。在你有一个突然需要确定发件人是UIBarButtonItem还是UIButton的公共处理程序,或者你想要针对这个BarButtonItem呈现UIPopoverController(但你只有UIButton引用......)之前,这似乎不会太多。