ios – 摆脱UINavigationBar右侧的空间

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

它是一个带有UIBarButtonItem的UINavigationBar,它使用自定义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右侧那个令人讨厌的小边框.

我尝试按照“How to remove padding next to a UIBarButtonItem”中的描述设置自定义TitleView,但这并没有改变一件事.

我还尝试添加另一个负宽度的UIBarButtonItem(正如我在阅读的一些博文中所建议的那样),但这也没有帮助.

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

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

最佳答案 将有两种解决方案. (这可能不是确切的解决方案)

1)你应该继承UINavigationBar并使用它.例如,您可能必须在右上角自己绘制UIBarButtonItem.

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

我希望第二种解决方案很容易在您的要求中实现.我认为没有任何其他方法可以达到您的要求.

点赞