摆脱UINavigationBar右侧的空间

所以,这是我想要完成的:

这是它应该看起来

这是一个带有UIBarButtonItemUINavigationBar ,它使用自定义的UIButton进行初始化。
基本上是这样的:

 UIButton *favoriteButton = [UIButton buttonWithType:UIButtonTypeCustom]; [favoriteButton addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; favoriteButton.frame = CGRectMake(0.0f, 0.0f, 44.0f, 44.0f); UIImage *backgroundImage = [[UIImage imageNamed:@"favorite-button-background-orange"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 2, 0, 0)]; [favoriteButton setBackgroundImage:backgroundImage forState:UIControlStateNormal]; UIBarButtonItem *favoriteButtonItem = [[UIBarButtonItem alloc] initWithCustomView:favoriteButton]; 

问题是我似乎无法摆脱UINavigationBar右侧的那个讨厌的小边框。

这就是它的样子

我试图设置一个自定义TitleView ,如“ 如何删除UIBarButtonItem旁边的填充 ”中所述,但这并没有改变一件事情。

我也尝试添加另一个UIBarButtonItem与消极的宽度(正如我读的一些博客文章中所build议的),但是也没有帮助。

 UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; negativeSpacer.width = -5.0f; self.navigationItem.rightBarButtonItems = %[favoriteButtonItem, negativeSpacer]; 

我认为iOS不会让我改变它,因为“圆边框”保留了一些(不可避免的)空格/填充? 所以我的问题是。 我应该如何解决这个限制? 我是否需要创build一个自定义的UINavigationBar类? 我可以通过修改UIBarButtonItem伪造它吗? 我只是使用错误的组件?

会有两个解决scheme。 (这可能不是确切的解决scheme)

1)你应该UINavigationBar并使用它。 例如,你可能必须自己绘制你的UIBarButtonItem右上angular

2)而不是使用UINavigationBar ,使用UIView和添加子视图,使其看起来像UINavigationBar并使用它。

我希望第二个解决scheme可以很容易地达到您的要求。 我不认为会有其他的方式来达到你的要求。

在导航栏中没有自定义默认导航栏button项(back button, right bar button and left barbutton ) 。 为了获得您的要求,您可以使用自定义导航栏。

你提到的第二个解决scheme实际上是工作的(今天在iOS6和7上testing)。 问题是rightBarButtonsItem数组的元素从右到左显示; 这意味着负面空间实际上需要作为数组的第一项出现,以达到预期的效果。