3

更新 2

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

更新 1

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

原帖

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

我有一个自定义视图,它充当我的导航栏,并包含一个返回菜单的小按钮。(我会称之为 menuBtn)。在这个自定义导航栏下方,我有一个tableViewHeader包含 2 个按钮的表格视图,用于在表格中的日期之间导航。(我将调用这些按钮:prevBtennextBtn)。我将以这 3 个视图为例,但问题无处不在……

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

让它变得更奇怪 - 当问题发生时,我可以看到有时特定按钮的点击区域(即menuBtn)与不同的按钮( )重叠prevBtn

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

  1. ClipToBounds父视图
  2. 玩弄AutoResizingMasks

我有一种预感,这与我在两者之间切换的事实有关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];

}

一些截图

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

正常状态 通话状态栏已打开 点击区域错误

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

提前致谢。

4

1 回答 1

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。

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

于 2014-03-11T12:14:21.827 回答