更新2

我的怀疑是正确的。问题出在动画上,因为我没有考虑到Y轴的原点,当看到通话中状态栏时Y轴的原点是不同的。我还将添加一个答案,其中也显示了相关代码。

更新1

我以为菜单的动画导致了问题。当我按下菜单时,它将启动动画以显示菜单。动画将显示的VC向右滑动,将其缩小一点,然后在z轴上旋转以使其看起来平滑酷。
我会朝这个方向进行调查,并在发现任何问题时进行更新。

原始帖子

在我的应用程序中看到“通话中”状态栏时,我注意到了一些UI问题。

我有一个自定义视图,它充当我的导航栏,并包含一个返回到菜单的小按钮。 (我将其称为menuBtn)。在此自定义导航栏的下面,我有一个表格视图,其中包含一个带有2个按钮的tableViewHeader,可在表格的各天之间进行导航。 (我将这些按钮称为prevBtennextBtn)。我将以这3个视图为例,但是问题到处都是...

通常情况下,一切正常,并且按预期进行。即使当“通话中”状态栏变得可见时,调整大小的效果仍然完美,生活也很棒。当我单击menuBtn时问题就开始了,因此当前视图会滑开以显示主菜单(这样做是为了在Storyboards之间切换)。现在,当我返回原始屏幕时,所有视图似乎都正常(按大小),但是点击区域现在与按钮的图像不匹配:我可以看到按钮应该在的位置,但是当我点击它没有任何反应。奇怪的是,我可以在按钮下点击,它将触发绑定到这些按钮的动作。

更奇怪的是-当问题解决时,我可以看到有时某个特定按钮(即menuBtn)的点击区域重叠了一个differnet按钮(prevBtn)。

一直在寻找原因/解决方案。我已经读过以下运气不佳的文章:

  • ClipToBounds the parent view
  • Play around with AutoResizingMasks

  • 我直觉这与我在Storyboards之间切换的事实有关-尽管尝试在界面生成器中设置autoresize并没有完成这项工作。

    某些可能对想要帮助的人有用的代码

    按下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];
    
    }
    

    一些屏幕截图

    在第三个屏幕截图中,当我点击prevBtn(位于menuBtn下方的那个)时,我会激活menuBtn操作。 (如我绘制的圆圈中所示-因此,在红色圆圈内轻击应激活prevBtn,但会触发menuBtn。在黑色圆圈中轻击应无作用,但会触发prevBtn)



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

    提前致谢。

    最佳答案

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

    通过将Y轴的原点添加到动画的计算中,我解决了这个问题。
    因此,每个 call 如下所示:

     //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"];
    

    注意当 call 状态栏不可见时,附加的self.view.originY等于0,否则为20。

    希望这会帮助任何人。我浪费了几天!

    08-18 14:15