首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >navigationItem setRightBarButtonItems间距太宽

navigationItem setRightBarButtonItems间距太宽
EN

Stack Overflow用户
提问于 2014-11-24 06:18:51
回答 3查看 2K关注 0票数 8

我试着缩小这两个按钮之间的距离。

我在用

代码语言:javascript
复制
navigationItem setRightBarButtonItems

设置两个按钮项,但它们之间的距离太远了。

我试着增加负空间,我尝试在它之后增加一个间隔,固定的空间,灵活的空间。不要在文档中看到任何表明你不能改变间距的东西,但我却找不到。

谢谢你提前帮忙。

回答后的编辑:

陈兆贞的答案是完全正确的,但由于一开始我还不太明白,所以我想我应该分享一下让我意识到他完全正确的代码。

如果你把它放在一个块里,这就是他(非常正确)的答案是什么样子:

代码语言:javascript
复制
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级别上重新创建视图,然后将其添加到要在其中显示的视图中。

再次感谢陈兆忠!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-24 07:22:07

我以前也这么做过。

您必须为按钮创建自己的UIView。因为默认的uibarbuttonitem项目有一些填充,一个左右两边。

代码语言:javascript
复制
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用于调整边界和最右边的酒吧按钮之间的填充。

票数 5
EN

Stack Overflow用户

发布于 2015-05-22 11:42:47

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

我发现我的新按钮之间的距离实际上比标准的苹果距离要小一些,所以我使用了嵌入在UIView中的UIView的例子,但是改变了UIView的框架,使其稍微大一些。

代码语言:javascript
复制
UIView *filterBtnView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 45, 35)];
票数 0
EN

Stack Overflow用户

发布于 2016-01-24 18:11:43

代码语言:javascript
复制
- (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]]; //
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27098924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档