更新2
我的怀疑是正确的。问题出在动画上,因为我没有考虑到Y轴的原点,当看到通话中状态栏时Y轴的原点是不同的。我还将添加一个答案,其中也显示了相关代码。
更新1
我以为菜单的动画导致了问题。当我按下菜单时,它将启动动画以显示菜单。动画将显示的VC向右滑动,将其缩小一点,然后在z轴上旋转以使其看起来平滑酷。
我会朝这个方向进行调查,并在发现任何问题时进行更新。
原始帖子
在我的应用程序中看到“通话中”状态栏时,我注意到了一些UI问题。
我有一个自定义视图,它充当我的导航栏,并包含一个返回到菜单的小按钮。 (我将其称为menuBtn
)。在此自定义导航栏的下面,我有一个表格视图,其中包含一个带有2个按钮的tableViewHeader
,可在表格的各天之间进行导航。 (我将这些按钮称为prevBten
和nextBtn
)。我将以这3个视图为例,但是问题到处都是...
通常情况下,一切正常,并且按预期进行。即使当“通话中”状态栏变得可见时,调整大小的效果仍然完美,生活也很棒。当我单击menuBtn
时问题就开始了,因此当前视图会滑开以显示主菜单(这样做是为了在Storyboards
之间切换)。现在,当我返回原始屏幕时,所有视图似乎都正常(按大小),但是点击区域现在与按钮的图像不匹配:我可以看到按钮应该在的位置,但是当我点击它没有任何反应。奇怪的是,我可以在按钮下点击,它将触发绑定到这些按钮的动作。
更奇怪的是-当问题解决时,我可以看到有时某个特定按钮(即menuBtn
)的点击区域与重叠了一个differnet按钮(prevBtn
)。
一直在寻找原因/解决方案。我已经读过以下运气不佳的文章:ClipToBounds
the parent view。 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。希望这会帮助任何人。我浪费了几天!