使用自定义图像按钮在 UIToolbar 上命中目标不正确

Posted

技术标签:

【中文标题】使用自定义图像按钮在 UIToolbar 上命中目标不正确【英文标题】:Hit target on UIToolbar with custom-image buttons is not correct 【发布时间】:2010-08-17 19:42:18 【问题描述】:

我有一个使用我自己的背景图像自定义的 UIToolbar。因此,内置的 UIBarButtonItem 外观对我不起作用,所以我使用的是已经准备好在栏中显示的图像。我用这种方法创建了一个自定义按钮项:

+ (UIBarButtonItem *)customWithImage:(UIImage *)image enabled:(BOOL)enabled target:(id)target action:(SEL)selector 
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    //I've tried different values for the frame here, but no luck
button.frame = CGRectMake(0, 0, 44, 44);
button.enabled = enabled;
button.showsTouchWhenHighlighted = YES;
[button addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside];
[button setImage:image forState:UIControlStateNormal];

UIBarButtonItem *it = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease];
    //Tried changing this, to no avail
it.width = 32.f;
return it;

我在左边有一个按钮,在右边有一个按钮,我正在努力做到这一点,以便如果您点击 UIToolbar 的最左侧或最右侧,则会点击相应的按钮。但是,使用这些自定义按钮,命中目标不会一直延伸到 UIToolbar 的边缘,而是从侧面插入:

http://skitch.com/andpoul/d1p8g/hit-targets

非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

如果您使用自定义视图(它可能只使用视图的宽度),UIBarButtonItem.width 可能会被忽略。

一个蹩脚的技巧是使工具栏更宽(因此它粘在屏幕外)并在背景图像中添加透明边缘以进行补偿。这会使按钮更靠近屏幕边缘。

另一种方法是使用带有 UIButton 子视图的 UIImageView。

【讨论】:

这是我决定的蹩脚黑客。我知道这很糟糕,但是,嘿,解决了这个问题。在我的 UIToolbar 子类中,我将 layoutSubviews 中按钮的框架调整为更合理。我尽量保持保守,这样它就不会在未来的操作系统上完全吃掉它。【参考方案2】:

我认为您必须采取的唯一方法是使按钮更宽(通过从左侧添加一些,从右侧添加一些来更改图像)并调整大小...

【讨论】:

使按钮变宽也无济于事,因为左侧和右侧仍有空间。

以上是关于使用自定义图像按钮在 UIToolbar 上命中目标不正确的主要内容,如果未能解决你的问题,请参考以下文章

来自图像的自定义 UIToolBar

将自定义图像 UIButtons 添加到自定义 UIToolbar 无法正常工作

如何使用自定义背景图像从 UINavigationBar 和 UIToolbar 中删除圆角?

UIBarButtonItem 占据 UIToolbar 的整个宽度

我可以向 UIToolbar 添加彩色按钮吗?

自定义 UIToolBar 的正确方法是啥?