我正在尝试在UINavigationController
的工具栏上添加一个响应UIControlEventTouchDown
的按钮。特别是,当用户按下按钮时,我希望它继续发射。
我注意到在iOS 7中(这在iOS 5或6中不是问题),当状态栏可见时,几乎就像底部大约有20个像素一样屏幕不再响应UIControlEventTouchDown
(即,足以覆盖工具栏上的按钮的下半部分。虽然按钮 响应UIControlEventTouchUpInside
in屏幕的这一部分。按钮的上半部分仍然响应UIControlEventTouchDown
。
换句话说,当状态栏出现时,如果点击按钮的上半部分,它会根据需要单独响应这两个事件。但是,如果点击按钮的下半部分,它只会在UIControlEventTouchUpInside
发生后才响应这两个事件。
当状态栏被隐藏时,一切都很完美。
以下是UINavigationController
:
- (BOOL)prefersStatusBarHidden
{
return NO; // if YES, everything works great!
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
_button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 32, 32)];
_button.backgroundColor = [UIColor redColor];
[_button addTarget:self action:@selector(touchDown) forControlEvents:UIControlEventTouchDown];
[_button addTarget:self action:@selector(touchUp) forControlEvents:UIControlEventTouchUpInside];
_barButtonItem.customView = _button;
}
- (void)touchDown
{
_button.backgroundColor = [UIColor greenColor];
}
- (void)touchUp
{
_button.backgroundColor = [UIColor redColor];
}
我知道iOS 7引入了transparent status bars/navigationBars/toolbars
,它在显示内容时会产生各种影响,但我无法找到任何有助于解决上述问题的内容。
我还应该补充一点,在模拟器中一切正常。只有在设备上测试时才会出现此问题。
任何建议都将不胜感激。谢谢。