当呼叫状态栏可见时,UIButtons的点击区域会发生变化

时间:2014-02-25 11:32:27

标签: ios uibutton storyboard in-call

更新2

我的怀疑是正确的。问题在于动画,因为我没有考虑Y轴的原点,当看到呼叫状态栏时,Y轴的原点是不同的。我还会添加一个显示相关代码的答案。

更新1

我原以为菜单的动画导致了问题。当我按下菜单时,它会启动动画以显示菜单。动画将所呈现的VC向右滑动,将其缩小一点并在z轴上旋转以使其看起来平滑凉爽。 如果我能找到任何东西,我会调查那个方向并进行更新。

原始帖子

我在应用程序中看到In-Call状态栏时发现了一些UI问题。

我有一个自定义视图,它充当我的导航栏,并包含一个小按钮,可以返回菜单。 (我称之为menuBtn)。在此自定义导航栏下方,我有一个包含tableViewHeader的表格视图,其中包含2个按钮,可在表格中的天数之间导航。 (我会称这些按钮为:prevBtennextBtn)。我将使用这3个视图作为示例,但问题仍然存在......

通常情况下一切都很完美并且符合预期。即使可以看到In-Call状态栏,调整大小也很完美,生活也很棒。单击menuBtn时会出现问题,因此当前视图会滑开以显示主菜单(这样做我在Storyboards之间切换)。现在,当我回到原始屏幕时,所有视图看起来都很好(尺寸方面),但现在点击区域与按钮的图像不匹配:我可以看到按钮应该在哪里但是当我点击它没有任何反应。奇怪的是,我可以点击下面的按钮,它会触发动作绑定到这些按钮。

让它变得更奇怪 - 当问题出现时我可以看到有时特定按钮(即menuBtn的点按区域重叠一个不同的按钮(prevBtn )。

一直在寻找原因/解决方案。我已经阅读了以下帖子但没有运气:

  1. ClipToBounds the parent view
  2. Play around with AutoResizingMasks
  3. 我预感到它与我在Storyboards之间切换的事实有关 - 尽管尝试在界面构建器中设置自动调整大小并没有完成任务。

    某些代码可能对可能需要帮助的人提供帮助

    按下menuBtn时触发的方法:

    - (void)replaceChildStoryboard:(NSString *)storyboardName
    {
    //remove previos child's view and itself from parent
    [currNav removeFromParentViewController];
    [currNav.view removeFromSuperview];
    
    //instantiate new storyboard
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil];
    UINavigationController *vc = [storyboard instantiateInitialViewController];
    
    //update curr pointer to new child and add it to parent
    currNav = vc;
    [self addChildViewController:currNav];
    [self.view addSubview:currNav.view];
    [currNav didMoveToParentViewController:self];
    
    //animate transition
    [self slideNavAnimated:NO];
    [self navPressed];
    
    }
    

    一些屏幕截图

    在第三个屏幕截图中,当我点按prevBtnmenuBtn下方的那个)时,我会激活menuBtn操作。 (如我绘制的圆圈中所示 - 因此在红色圆圈内点击应激活prevBtn,但会触发menuBtn。点击黑色圆圈应该什么也不做,只会触发prevBtn

    Normal state In-Call status bar is open tap area wrong

    希望有人能帮助我找到问题的根源并解决问题。

    提前致谢。

1 个答案:

答案 0 :(得分:0)

正如我在问题的第二次更新中提到的,问题似乎出现在菜单的动画中。最初我没有考虑到y轴视图的原点不同的事实取决于通话中状态栏的状态(可见\不可见)。

通过将Y轴的原点添加到动画的计算中,我解决了问题。 所以每个看起来像这样的电话:

 //adding the animations
      [currNav.view.layer addAnimation:[NRAnimationFactory positionAnimationFrom:CGPointMake(centerOriginX, self.view.frameHeight/2)
                                                                              To:CGPointMake(self.view.frameWidth, self.view.frameHeight/2)
                                                                        Duration:duration]
                                forKey:@"moving"];   

我把它变成了

 //adding the animations :
      [currNav.view.layer addAnimation:[NRAnimationFactory positionAnimationFrom:CGPointMake(centerOriginX, self.view.originY + self.view.frameHeight/2)
                                                                              To:CGPointMake(self.view.frameWidth, self.view.originY + self.view.frameHeight/2)
                                                                        Duration:duration]
                                forKey:@"moving"];   

注意当呼叫状态栏不可见时,额外的self.view.originY等于0,否则为20。

希望这对任何人都有帮助。我浪费了几天时间!