Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS 7 UI转换问题:屏幕底部忽略触摸事件_Ios_Objective C_Ios7_Uikit_Uiwindow - Fatal编程技术网

iOS 7 UI转换问题:屏幕底部忽略触摸事件

iOS 7 UI转换问题:屏幕底部忽略触摸事件,ios,objective-c,ios7,uikit,uiwindow,Ios,Objective C,Ios7,Uikit,Uiwindow,我目前正在修复一个旧应用程序(在iOS 5时代构建)中的一个问题,在这个应用程序中,屏幕底部的按钮触摸事件被忽略。我可以通过创建一个新项目、删除情节提要(以及信息列表中的引用)并在didFinishLaunchingWithOptions中执行以下操作来重新创建此问题(我知道这不是正确的方法,但我正在使用的这个应用程序具有类似的设置) 一旦我运行了这个应用程序,“嘿”按钮只能通过按下它的上半部分来工作。我有一种感觉,它与iOS7状态栏有关,以及用户界面现在是如何在它下面,而不是在它下面。我试着调

我目前正在修复一个旧应用程序(在iOS 5时代构建)中的一个问题,在这个应用程序中,屏幕底部的按钮触摸事件被忽略。我可以通过创建一个新项目、删除情节提要(以及信息列表中的引用)并在didFinishLaunchingWithOptions中执行以下操作来重新创建此问题(我知道这不是正确的方法,但我正在使用的这个应用程序具有类似的设置)

一旦我运行了这个应用程序,“嘿”按钮只能通过按下它的上半部分来工作。我有一种感觉,它与iOS7状态栏有关,以及用户界面现在是如何在它下面,而不是在它下面。我试着调整窗口的边界,但是没有用。我尝试了各种方法让这个按钮工作,但唯一有效的方法是隐藏状态栏


有人知道如何在这种情况下使用该按钮吗?

我在ipad应用程序中尝试了你的代码,但“测试”按钮仅在纵向模式下显示

我使用了下面的代码使它出现在景观中,并为其操作添加了一个目标

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:  (NSDictionary *)launchOptions
{
 self.window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)];
 self.window.screen = [UIScreen mainScreen];

 UIViewController *vc = [[UIViewController alloc] init];
 vc.view.backgroundColor = [UIColor yellowColor];
 self.window.rootViewController = vc;

 UIButton *test = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 test.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
 [test setTitle:@"Hey" forState:UIControlStateNormal];
 [test addTarget:self action:@selector(testTapped:)  forControlEvents:UIControlEventTouchUpInside];
 [test setBackgroundColor:[UIColor whiteColor]];
 test.frame = CGRectMake(0, 824, 200, 200);
 [vc.view addSubview:test];

 [self.window makeKeyAndVisible];

 return YES;
}

-(void)testTapped:(id)sender
{
 // the button responder
}
在这种情况下,自动调整掩码大小是必要的,因为您已经为按钮硬编码了帧。我添加了“UIViewAutoresizingFlexibleTopMargin”,使其在横向和纵向中都可见

还为按钮操作添加了一个目标,这是按钮响应所必需的


希望能有帮助

我什么时候测试你的代码?我的模拟器按钮不可见,只显示黄色。因为原因是您的按钮y位置是在可见屏幕之外创建的

您的按钮y值为824.5,但设备尺寸为568(iPhone 4英寸)。因此,您的按钮创建超出当前可见屏幕边界的内容

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)];
    self.window.screen = [UIScreen mainScreen];

    UIViewController *vc = [[UIViewController alloc] init];
    vc.view.backgroundColor = [UIColor yellowColor];
    self.window.rootViewController = vc;

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button addTarget:self
               action:@selector(aMethod:)
     forControlEvents:UIControlEventTouchDown];
    [button setTitle:@"Show View" forState:UIControlStateNormal];
    button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
    [vc.view addSubview:button];

    [self.window makeKeyAndVisible];

    return YES;
}

我不认为这些事件被忽略了——我认为只是在iOS7中,按钮按下时没有显示按钮突出显示反馈

使用您的示例,将其添加到AppDelegate.m中的didFinishWithLaunching

[test addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
-(void)buttonPressed:(id)sender{
    NSLog(@"hey!");
}
然后将此方法添加到AppDelegate.m

[test addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
-(void)buttonPressed:(id)sender{
    NSLog(@"hey!");
}
点击按钮的底部边缘,您将看到调用的操作方法,即使没有显示可见的反馈


奇怪的是,如果您按任意方向拖动,视觉反馈都会正确显示。

我已经在测试项目中运行了您的代码。运行此项目后,我没有得到您的按钮,因为它超出了框架。然后我正确地设置帧,然后按钮出现,它接收动作。我怀疑你的按钮出了框,这就是为什么它没有收到动作。请检查视图框,确保按钮位于视图内部,而不是视图外部

“我试图调整窗口的边界”

按钮没有放在你认为应该放的地方。这是不允许的,这就是为什么你不能正确按下它的原因。您只能按视图内的按钮,而不能按视图外的按钮,即使按钮将显示在屏幕上

您可以删除状态栏,除非您需要它

请记住,您应该调整视图内的按钮。 在纸上画这个,画手机,不一定要准确,但你需要知道物体的所有尺寸。在状态栏中绘制,您还有多少空间。如果随后将帧大小设置为大于剩余大小,则将超出范围。 当涉及到按钮时,您应该尝试不使用静态数据进行放置,而是使用视图的大小来确定按钮应该在视图中的位置

- (void)applicationDidFinishLaunching:(UIApplication *)application{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
// Override point for customization after application launch.

mvc = [[MainViewController alloc]init];
[mvc setTitle:@"Main View"];

UIButton *test = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[test setTitle:@"Hey" forState:UIControlStateNormal];
[test setBackgroundColor:[UIColor whiteColor]];
float buttonHeight = 200;
float buttonWidth = 200;
float statusbarHeight = 20; //can be adjusted to 0 if no statusbar [ 20 | 0 ]
test.frame = CGRectMake(0, mvc.view.frame.size.height-buttonHeight-statusbarHeight , buttonWidth, buttonHeight); //Will adjust with different screen sizes
[mvc.view addSubview:test];

[self.window addSubview:mvc.view];
self.window.rootViewController = mvc;
[self.window makeKeyAndVisible];
}

请原谅这些硬编码的值,我正在用一台iPad Mini进行测试,只是想创建一些快速而肮脏的东西。还有最后一件事……这在模拟器上可以正常工作,但在实际设备上却不行……你可能是对的,它与状态栏有关。请阅读,看看它是否有助于您找出如何避免此问题。您能提供您遇到问题的实际绘图代码吗?从你的测试中,除了添加硬编码的框架视图,我真的不知道你在做什么。。。这告诉我的不多,也不适合我。iOS7引入了自动调整大小的遮罩,彻底改变了它们的整个布局方法/结构。我的iOS 6内置应用程序没有正确放置按钮视图,因此,当它们看起来正确时,触摸事件记录在屏幕一半以外的容器中。尝试添加此[测试集翻译自动调整大小GMaskintoConstraints:否]@FelixKhazin-嘿,你检查过自动布局是否打开了吗?这并不能解决问题。将此应用加载到您的设备上。然后尝试单击“嘿”按钮的最底部。你会发现在那里点击是不起作用的。虽然这个按钮确实在iPhone上看不见,但这并不是我的问题所在。拿着你的按钮,把它移动到iPhone的底部边缘。所以设置y=(568-40)。现在单击按钮底部的20个像素。它们不可点击…这就是问题所在。正如我在前面的评论中提到的,只要调整按钮使其位于屏幕底部,您就会注意到按钮的20个像素不可点击。您可以上传您的项目并给我链接,这样我就可以知道发生了什么。您是对的,但是,我如何才能让突出显示的反馈工作?