objective-c - BarButtonItem 因未知原因调整大小

标签 objective-c ios uibarbuttonitem

我有一个像这样初始化的按钮>

self.button = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
                                                            target:self 
                                                            action:@selector(doAction)];

稍后,我会为其附加自定义背景,就像那样>

    [self.button  setBackgroundImage:[UIImage imageNamed:@"customNavBar_button_right_enabled"] 
                            forState:UIControlStateNormal 
                          barMetrics:UIBarMetricsDefault];

并将其放在导航栏上。

   [self.navigationItem setRightBarButtonItem:self.button 
                                     animated:NO];

该图像具有固定大小。我希望该按钮具有完全自定义的背景图像,无需使用 UIEdgeInsets 进行“智能”调整大小。我不需要任何调整大小。但由于某种原因,它的表现就像它的插图是事件的,并且它被调整为具有更大的宽度,大约图片的中间一半被相当程度地拉伸(stretch)以提供更宽的按钮。

为什么会这样?我怎样才能防止这种情况发生?

最佳答案

使用自定义图像实现栏按钮项目的最简单方法是:

  1. 将 UIButton 拖到 Storyboard上。
  2. 将按钮类型设置为自定义,并设置该按钮的图像。
  3. 将按钮拖到工具栏上。

Storyboard自动创建一个 UIBarButtonItem 并将您的 UIButton 添加为 subview 。或者,如果您不想使用 Storyboard,您可以实现以下内容:

// Initialize the UIButton
UIImage *buttonImage = [UIImage imageNamed:@"buttonImage.png"];
UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
[aButton setImage:buttonImage forState:UIControlStateNormal];
aButton.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height);

// Initialize the UIBarButtonItem
UIBarButtonItem aBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:aButton];

// Set the Target and Action for aButton
[aButton addTarget:self action:@selector(aButtonClicked:) forControlEvents:UIControlEventTouchUpInside];

希望对你有帮助!

编辑:不要忘记将 aBarButtonItem 添加到 UIToolbar。

关于objective-c - BarButtonItem 因未知原因调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13073170/

相关文章:

objective-c - 如何抑制 CFUserNotificationDisplayAlert 生成的控制台消息

ios - 在iOS App和WatchKit Extension之间共享Plist

ios - 无法从第二个 View Controller 接收回调

iphone - 有没有办法通过浏览器安装 iPhone App?

ios - 以编程方式创建 UIToolbar 后 UIBarButtonItems 未显示?

ios - 更改 NSDate 格式

ios - flutter/iOS : Could not determine bundle id

ios - 如何动画一个接一个的 UILabel

ios - 具有奇怪外观的 setBackButtonBackgroundImage

以编程方式创建的 Swift UIBarButtonItem 位置