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