4

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

这就是它应该看起来的样子

它是一个UINavigationBar用 aUIBarButtonItem初始化的 custom 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(如我阅读的一些博客文章中所建议的那样),但这也无济于事。

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

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

4

3 回答 3

1

您提到的第二个解决方案实际上有效(今天在 iOS6 和 7 上测试)。问题是rightBarButtonsItem数组的元素是从右到左显示的;这意味着负空间实际上需要作为数组的第一项出现才能达到预期的效果。

于 2013-09-20T13:56:12.343 回答
1

没有用于自定义导航栏中默认导航栏按钮项(back button, right bar button and left barbutton )的选项。为了满足您的要求,您可以使用自定义导航栏。

于 2013-04-19T13:59:02.887 回答
0

会有两种解决方案。(这可能不是确切的解决方案)

1)你应该继承UINavigationBar并玩弄它。例如,您可能必须将UIBarButtonItem自己画在右上角

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

我希望第二种解决方案很容易满足您的要求。我认为没有其他方法可以满足您的要求。

于 2013-04-19T14:15:35.827 回答