gpt4 book ai didi

ios - 当通话状态栏可见时,UIButtons 的点击区域会发生变化

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:09 24 4
gpt4 key购买 nike

更新 2

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

更新 1

我以为是菜单的动画导致了问题。当我按下菜单时,它会启动一个动画来显示菜单。动画将呈现的 VC 向右滑动,将其缩小一点并在 z 轴上旋转,使其看起来很流畅。我会朝那个方向调查,如果有发现,我会更新。

原帖

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

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

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

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

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

  1. ClipToBounds the parent view .
  2. Play around with 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)

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

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

提前致谢。

最佳答案

正如我在问题的第二次更新中提到的,问题似乎出在菜单的动画中。本来我没有考虑到y轴view的原点根据通话中状态栏的状态(可见\不可见)不同而不同。

通过将 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。

希望这对大家有所帮助。我在上面浪费了几天时间!

关于ios - 当通话状态栏可见时,UIButtons 的点击区域会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22012953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com