iOS 调整UIBarButtonItem的间距

作者: 墨守青城 | 来源:发表于2016-09-27 22:32 被阅读5410次

根据iOS系统方法创建的UIBarButtonItem间距在一般看来是比较大的, 如果想要调整, 可以尝试以下一种方法:
首先创建两个UIBarButtonItem

UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"gouwuche.png"]     style:UIBarButtonItemStylePlain target:nil action:nil];
UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"search.png"] style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.rightBarButtonItems = @[item1,item2];

运行结果如下:

Paste_Image.png
  1. 使用UIBarButtonSystemItemFixedSpace
    网上有的说创建一个type为UIBarButtonSystemItemFixedSpace的UIBarButtonItem进行占位, 并将其设置为负值,以期实现减小间距的效果.
    亲测代码如下:
UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"gouwuche.png"] style:UIBarButtonItemStylePlain target:nil action:nil];
UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"search.png"] style:UIBarButtonItemStylePlain target:nil action:nil];
//新加的代码
UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
space.width = -10;
self.navigationItem.rightBarButtonItems = @[space,item1,item2];

可以看到购物车距离右边框的距离缩小了.


Paste_Image.png

但是当我视图再在item1 和 item2 之间加一个space2 时, 如果当width值为正数时, 间距会增加, 当width的值为负值, 间距并没有变小. 所以总结, 此法只有在调整UIBarButtonItem 到左右边距时有效.
2.自定义Button
由于使用系统默认的方法创建的UIBarButtonItem 的大小并不是由我们决定的, 所以我们可以通过自己创建一个自定义大小的button的方式来创建一个UIBarButtonItem, 以达到缩小间隔的目的.代码如下:

    UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeCustom];
    [btn1 setImage:[UIImage imageNamed:@"gouwuche.png"]    forState:UIControlStateNormal];
    [btn1 setFrame:CGRectMake(0, 0, 30, 30)];
    UIBarButtonItem *item1 = [[UIBarButtonItem alloc]initWithCustomView:btn1];
    UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeCustom];
    [btn2 setImage:[UIImage imageNamed:@"search.png"] forState:UIControlStateNormal];
    [btn2 setFrame:CGRectMake(0, 0, 30, 30)];
    UIBarButtonItem *item2 = [[UIBarButtonItem alloc]initWithCustomView:btn2];
    self.navigationItem.rightBarButtonItems = @[item1,item2];
可以看到间距确实减小了:
Paste_Image.png
3.设置UIEdgeInsets
如果是通过图片创建的UIBarButtonItem, 我们可以通过设置imageInsets属性来调整image到按钮的距离, 来缩小间距:
UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed: @"gouwuche.png"]
style:UIBarButtonItemStylePlain
target:nil
action:nil];
UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"search.png"]
style:UIBarButtonItemStylePlain target:nil action:nil];
//设置图片与按钮间距
[item2 setImageInsets:UIEdgeInsetsMake(0, 15, 0, -15)];
self.navigationItem.rightBarButtonItems = @[item1,item2]; Paste_Image.png

总结: 如果是用图片创建的UIBarButtonItem , 第三种方式较为简单; 如果是通过图片以外的方式创建可以通过第二种方式实现; 如果只是想调整按钮到两边的距离, 用第一种方式即可.

相关文章

网友评论

  • Corbin___:如果直接这样
    UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"gouwuche.png"] style:UIBarButtonItemStylePlain target:nil action:nil];
    UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"search.png"] style:UIBarButtonItemStylePlain target:nil action:nil];
    self.navigationItem.rightBarButtonItems = @[item1,item2];
    那item之间的距离是多少,最右边的item离右边屏幕边缘是多少
  • 东东隆东抢:官方的文档里说了,如果fixedSpace 设置为0或者负数,会忽略设计,使用item本身大小。
    秦枫桀:其他机型设置负值都有效,唯独Plus这种宽屏下设置负的数值,无效。求解答?

本文标题:iOS 调整UIBarButtonItem的间距

本文链接:https://www.haomeiwen.com/subject/oichyttx.html