当“个人热点”处于打开状态时,视图会被上推(IOS 应用程序 - 目标 C)



我有一个问题,但我真的不知道如何解决它,我正在使用 objective-c 开发一个 IOS 应用程序,每当打开个人热点时,视图就会被推到它下面(所以我失去了 20px 的导航栏),我试图在网上找到解决方案,但我没有找到,有人可以给我任何关于如何解决这个问题的建议吗?

编辑:问题应该是我用于幻灯片菜单的这个库:https://github.com/aryaxt/iOS-Slide-Menu我的根视图控制器有类幻灯片导航控制器,我试图删除它,视图没有像以前那样被推高。有没有人遇到过类似的问题?

这是因为滑动菜单在激活时始终将self.view.frame.origin.y设置为 0。

要解决此问题,您需要根据状态栏的高度手动调整偏移量。

您可以在SlideNavigationController.m中找到两个rect.origin.y = 0,一个在moveHorizontallyToLocation中(它正在处理"推送"动画),另一个在initialRectForMenu中(帧的初始化方法)。您需要将这两行的0更改为正确的偏移量。

计算偏移的实现可以在这里找到。

- (float)offsetFromTop {
    UIView *view = self.view;
    CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
    CGRect statusBarWindowRect = [view.window convertRect:statusBarFrame fromWindow:nil];
    CGRect statusBarViewRect = [view convertRect:statusBarWindowRect fromView:nil];
    float fullHeight = statusBarViewRect.size.height;
    float offset = fullHeight;
    if (![UIApplication sharedApplication].statusBarHidden) {
        offset -= STATUS_BAR_HEIGHT;
    }
    return offset;
}

然后将这两行替换为rect.origin.y = [self offsetFromTop];

我也面临同样的问题,就像当我打开热点时,我的视图会下降(20 px),如果我删除热点 myview 会受到干扰(在这里我使用了 3 个单独的视图,如 Titlabar、滚动视图和底部视图......

问题是当您连接到热点时,此时"状态栏"高度会增加。所以观点正在向下推。

Solu:这里基于状态栏高度,我们正在更新UIView布局,如下所示。

视图中加载以下代码:

-(void)viewdidload
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didStatusBarFrameChanged) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
}
-(void)didStatusBarFrameChanged
{
CGRect barFrame = [UIApplication sharedApplication].statusBarFrame;
NSLog(@"didStatusBarFrameChanged %@", NSStringFromCGRect(barFrame));
[self updatePageViewLayouts];
}

注意:在这里使用"UIApplicationDidChangeStatusBarFrameNotification",我们获得了状态栏高度更新 Notification.so,在此基础上您可以增加/减少20px的视图大小(高度)。

最新更新