UIBarButtonItem插入导航栏时如何改变边框?

Posted

技术标签:

【中文标题】UIBarButtonItem插入导航栏时如何改变边框?【英文标题】:How to change the frame of UIBarButtoItem when inserted in the navigation bar? 【发布时间】:2012-08-21 06:58:37 【问题描述】:

我的应用中有一个导航控制器。我在视图的导航栏中添加 UIBarButtonItem 。当我将 UIBarButtonItem 添加到导航栏中时,它们的默认宽度和高度是 44*30。我想要导航栏中大小为 30*30 的 UIBarButtonItem。我怎样才能做到这一点? 我曾尝试更改 UIBarbutton 的 width 属性,但在探索时我发现只有在 ToolBar 中插入 UIBarButtons 才能更改默认宽度,而在插入导航栏时则无法更改。有什么方法可以实现吗?

我的基本需求是我想要导航栏左侧有两个 方形 (30*30) 栏按钮,导航栏右侧有一个。是的,我可以在那里插入简单的按钮并在那里设置框架而不是条形按钮。但是我只是想知道是否可以更改条形按钮的宽度。如果可以,是什么方法?

【问题讨论】:

【参考方案1】:

根据需要创建一个UIButton,并将其指定为左右栏按钮。您可以根据需要更改框架。与右键操作相同。

UIButton *mybutton = [UIButton buttonWithType: UIButtonTypeCustom];
[mybutton setImage:[UIImage imageNamed:@"anyimage.png"]];
  [mybutton setFrame:CGRectMake(0,0,30,30)];
[mybutton addTarget:self action:@selector(onclick:) forControlEvents: UIControlEventTouchUpInside];
UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithCustomView: mybutton];
[self.navigationItem setLeftBarButtonItem:customItem];

更新:-请根据您的边框样式使用它。

 [self.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc]initWithTitle:@"Test" style:UIBarButtonItemStyleBordered target:self action:@selector(test:)]];

【讨论】:

非常感谢桑迪!我昨天尝试了相同的解决方案,但无法获得输出。我在做一些不同的事情。您提供的解决方案创建了普通样式按钮,而不是苹果提供的其他样式。我尝试设置栏按钮的按钮样式但没有成功。你认为使用这种方法我们只能创建普通按钮而不是样式按钮吗? 你能说出你想要哪种风格的按钮吗? 我想要有边框的按钮 桑迪没关系。但我的问题是如何在更新版本中设置栏按钮的框架?我在实现这一目标方面没有任何成功。我已经尝试了一切。我认为根据我的经验,您必须为一件事做出牺牲。如果您选择自定义框架,那么您将无法为其设置任何样式,如果您选择样式,那么您将无法自定义其框架。你怎么看? 我们不能使用 UIBarButton 的 frame 属性,请参阅link 或者您需要在上面更新代码之前创建具有您想要和使用的边框样式的图像。我没有找到任何其他解决方案。如果您发现其他解决方案。请告诉我。【参考方案2】:
UIButton *desiredBtn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 30, 30)];
UIBarButtonItem *aBarButtonItem = [[UIBarButtonItem alloc]  initWithCustomView:desiredBtn];

然后将此条形按钮添加到导航栏

self.navigationItem.rightBarButtonItem = aBarButtonItem;

【讨论】:

以上是关于UIBarButtonItem插入导航栏时如何改变边框?的主要内容,如果未能解决你的问题,请参考以下文章

当我点击导航栏时,来自栏按钮的 ios 操作表不会关闭

如何在导航栏上的 UIBarButtonItem 内偏移 UIButton 图像?

隐藏导航栏时如何启用滑动手势?

iOS 7隐藏导航栏时如何更改状态栏的颜色?

切换侧边栏时如何在导航栏中移动/动画文本值

更改 UIButton 标题导航栏的颜色