所以,这就是我想要完成的事情:
UINavigationBar
UIBarButtonItem
,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
右侧那个令人讨厌的小边界。
我尝试按照“How to remove padding next to a UIBarButtonItem”中的说明设置自定义UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
target:nil
action:nil];
negativeSpacer.width = -5.0f;
self.navigationItem.rightBarButtonItems = %[favoriteButtonItem, negativeSpacer];
,但这并没有改变。
我还尝试添加另一个负宽度的UIBarButtonItem(正如我读过的一些博文中提到的那样),但这也无济于事。
UINavigationBar
我认为iOS不会让我改变它,因为“圆形边框”保留了一些(不可避免的?)空间/填充?
所以我的问题是。我该如何解决这个限制?我是否需要创建自定义UIBarButtonItem
课程?我可以通过修改{{1}}以某种方式伪造它吗?我只是使用了错误的组件吗?
答案 0 :(得分:1)
没有选项可以自定义导航栏中的默认导航栏按钮项(back button, right bar button and left barbutton )
。要获得您的要求,您可以使用自定义导航栏。
答案 1 :(得分:1)
您提到的第二个解决方案实际上有效(今天在iOS6和7上都进行了测试)。问题是rightBarButtonsItem
数组的元素是从右到左显示的;这意味着负空间实际上需要作为数组的第一项出现才能达到预期的效果。
答案 2 :(得分:0)
将有两种解决方案。 (可能不是确切的解决方案)
1)你应该继承UINavigationBar
并玩弄它。例如,您可能需要在右上角中自己绘制UIBarButtonItem
。
2)不要使用UINavigationBar
,而是使用UIView
并添加子视图,使其看起来与UINavigationBar
完全相同并使用它。
我希望第二解决方案很容易在您的要求中实现。我认为没有其他方法可以达到你的要求。