navigationItem setRightBarButtonItems间距太宽

时间:2014-11-24 06:18:51

标签: ios uinavigationcontroller uibarbuttonitem

enter image description here

我正在尝试缩短这两个条形按钮项之间的距离。

我正在使用

navigationItem setRightBarButtonItems

设置两个按钮项,但距离太远。

我尝试添加负空间,我尝试在其后添加间隔,固定空间,灵活空间。在文档中没有看到任何说明你无法改变间距但我找不到的方法。

感谢您的帮助。

回答后编辑:

Siu Chung Chan的答案是完全正确的,但由于我一开始并没有得到它,我想我会分享让我意识到他完全正确的代码。

如果你把它全部放在一个区块中,这就是他的(非常正确的)答案:

UIView *filterBtnView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
UIButton *filterBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
[filterBtn addTarget:self action:@selector(someMethod) forControlEvents:UIControlEventTouchUpInside];
[filterBtn setBackgroundImage:[UIImage imageNamed:@“someicon”] forState:UIControlStateNormal];
[filterBtnView addSubview:filterBtn];
UIBarButtonItem *btnFilter = [[UIBarButtonItem alloc] initWithCustomView:filterBtnView];

UIView *selectBtnView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
UIButton *selectBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
[selectBtn setBackgroundImage:[UIImage imageNamed:@“someothericon”] forState:UIControlStateNormal];
[selectBtn addTarget:self action:@selector(someOtherMethod:) forControlEvents:UIControlEventTouchUpInside];
[selectBtnView addSubview:selectBtn];
UIBarButtonItem *btnSelect = [[UIBarButtonItem alloc] initWithCustomView:selectBtnView];

[self.navigationItem setRightBarButtonItems:@[btnFilter, btnSelect] animated:YES];

对我来说,这样做的好处在于它可以让人看到苹果公司实际设置的一些观点是如何偏向他们只想使用它们的。因此,如果您想要进行高度自定义的UI,您必须进行大量的UIView操作以绕过它们(可能)非预期的障碍。

故事的道德:如果视图没有正确排列,请尝试从UIView级别重新创建视图,然后将其添加到要显示它的视图中。

再次感谢Siu Chung Chan!

3 个答案:

答案 0 :(得分:4)

我以前做过这个。

您必须为按钮创建自己的UIView。 导致默认的uibarbuttonitem在左侧和右侧都有一些填充。

ViewIconBtn* searchViewIconBtn = [[ViewIconBtn alloc] initWithImage:[UIImage imageNamed:@"searchIcon.png"]];
[searchViewIconBtn.btn addTarget:self action:@selector(toSearch) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem* btnSearch = [[UIBarButtonItem alloc] initWithCustomView:searchViewIconBtn];

UIBarButtonItem *space15 = [NegativeSpacer negativeSpacerWithWidth:15];
    [self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:space15,btnWishList,btnPost,btnSearch, nil]];

btnWishList,btnPost,btnSearch都是ViewIconBtn类。 在我的项目中,我在右侧创建了3个导航按钮。

UIBarButtonItem space15用于调整边界和最右边的按钮之间的填充。

答案 1 :(得分:0)

您提供的解决方案效果很好。如果您想简化它,您实际上可以直接使用UIButton作为自定义视图,而无需将其嵌入UIView

我发现我的新按钮之间的距离实际上比标准苹果距离略小,所以我使用UIButton嵌入UIView的示例,但改变了UIView的框架1}}稍大一些。

UIView *filterBtnView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 45, 35)];

答案 2 :(得分:0)

- (void)addTwoRightBarButtonItems 
{
    UIButton *reloadBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    reloadBtn.frame = CGRectMake(0.0, 0.0, 45.0, 44.0);
    [reloadBtn setImage:[UIImage imageNamed:@"reload_icon"] forState:UIControlStateNormal];men
    reloadBtn.imageEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0);
   // reloadBtn.backgroundColor = [UIColor redColor];

    UIButton *menuBtn = [UIButton buttonWithType:UIButtonTypeSystem];
    menuBtn.frame = CGRectMake(45.0, 0.0, 45.0, 44.0);
    UIImage *image = [[UIImage imageNamed:@"menu_icon"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    [menuBtn setImage:image forState:UIControlStateNormal];
    //menuBtn.backgroundColor = [UIColor greenColor];

    UILabel *badgeLbl = [[UILabel alloc]initWithFrame:CGRectMake(25, 8, 18, 18)];
    badgeLbl.layer.cornerRadius = 9;
    [badgeLbl.layer setMasksToBounds:YES];
    badgeLbl.backgroundColor = [UIColor colorWithRed:255.0/255.0 green:197.0/255.0 blue:0.0 alpha:1.0];
    badgeLbl.textColor = [UIColor colorWithRed:136.0/255.0 green:94.0/255.0 blue:16.0/255.0 alpha:1.0];
    badgeLbl.font = [UIFont fontWithName:@"Lato-Bold" size:9.f];
    badgeLbl.textAlignment = NSTextAlignmentCenter;
    badgeLbl.hidden = YES;
    [menuBtn addSubview:_lblBadge];

    UIBarButtonItem *offset = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
    offset.width = -10.0;

    UIView *v = [[UIView alloc]initWithFrame:(CGRect){.size.width = 90.0,.size.height = 44.0}];
    [v addSubview:reloadBtn];
    [v addSubview:menuBtn];

    UIBarButtonItem *reloadItem = [[UIBarButtonItem alloc] initWithCustomView:v];

    [self.navigationItem setRightBarButtonItems:@[offset,reloadItem]]; //
}

enter image description here