【问题标题】:UIBarButtonItem sizes differUIBarButtonItem 大小不同
【发布时间】:2013-05-29 05:57:09
【问题描述】:

我有一个应用程序,它使用 Storyboard 来显示两个屏幕。第一个是列表(在屏幕截图中称为“Lista”),第二个是地图(“Térkép”)。每个视图都有一个左右导航按钮。按下右键将地图视图推送到导航控制器。后退按钮在地图的viewDidLoad 方法中手动隐藏。

问题是,为什么栏按钮项在每个屏幕上的大小不同?如何控制按钮的大小?

按钮上的图像大小相同。皮肤在AppDelegate通过外观设置完成:

// navbar background
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"bg-titlebar.png"]
                                   forBarMetrics:UIBarMetricsDefault];

// navbar button background
[[UIBarButtonItem appearance] setBackgroundImage:[[UIImage imageNamed:@"btn-main.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(4.0, 4.0, 4.0, 4.0) resizingMode:UIImageResizingModeStretch]
                                        forState:UIControlStateNormal
                                      barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackgroundImage:[[UIImage imageNamed:@"btn-main-active.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(4.0, 4.0, 4.0, 4.0) resizingMode:UIImageResizingModeStretch]
                                        forState:UIControlStateHighlighted
                                      barMetrics:UIBarMetricsDefault];

// back button background
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:[[UIImage imageNamed:@"btn-back.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(4.0, 12.0, 4.0, 4.0) resizingMode:UIImageResizingModeStretch]
                                                  forState:UIControlStateNormal
                                                barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:[[UIImage imageNamed:@"btn-back-active.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(4.0, 12.0, 4.0, 4.0) resizingMode:UIImageResizingModeStretch]
                                                  forState:UIControlStateHighlighted
                                                barMetrics:UIBarMetricsDefault];

【问题讨论】:

  • 在我的情况下,这个公式一直对我有用。可能是您单独为条形按钮设置了界限,或者应该存在一些方向问题。
  • 对图片的问题总是很感激:)
  • 如果您当前正在使用 viewDidLoad,请尝试在 viewWillAppear 中设置按钮
  • Storyboard 中已设置按钮。

标签: iphone ios uinavigationbar uibarbuttonitem


【解决方案1】:

您可以通过在一个 segue 中创建两个相同的 UIBarButtonsItem 然后在另一个 segue 中复制粘贴按钮来获得两个相同的 UIBarButtonsItem(至少这在我的情况下有效,但我无法确定问题的根本原因,所以远)。

如果直接创建 UIBarButtonItem 不起作用,请在 NavigationItem 中放置一个 UIButton,它会自动创建一个带有 UIButton 的 UIBarButtonItem(见下图)。通过这种方式,您可以配置 UIBarButtonItem 中不存在的图像或其他属性。一旦您对 UIButton 的外观(嵌入在 Bar Button 中)感到满意,请将其复制粘贴到不同的 segue,它们应该保持相同的大小。

【讨论】:

  • 您是否尝试过,而不是通过外观代理删除 UIBarButtonItem 并设置图像,而是删除 UIButton 并直接设置图像?我知道不太方便,但我希望它能解决你的问题。
  • 我相信掉进 UINavitaionBars 的 UIButtons 会自动变成 UIBarButtonItems。我也尝试过从代码创建 UIBarButtonItems,但结果完全一样。
  • 是的,它们变成了 UIBarButtonItems,但它们并不完全相同。我刚刚编辑了答案以包含一个显示“纯” UIBarButtonItem 的图像和另一个内部带有 UIButton 的图像。如果像复制粘贴这样的按钮对您不起作用,那么我不知道,对不起。 :-(
  • 哦,我现在明白你想告诉我什么了 :) 所以让 UIBarButtonItem 充当标准视图并在其中放置一个 UIButton。这是一个很好的解决方法,它似乎有效。我一直在使用它,直到找到真正的解决方案,谢谢!
  • 好的,太好了。如果您找到根本原因,请告诉我,但我什至认为是当前 XCode 版本的问题,因为有时我无法在情节提要中查看按钮的图像(显示有问号和不同大小但在模拟器和设备中正确显示)。打开和关闭 XCode 有时能解决问题,有时不能。无论如何,我们很可能会在下周推出 iOS 7 beta SDK,所以让我们看看按钮会发生什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
相关资源
最近更新 更多