通话或连热点的时候页面向下偏移

2018-11-13  本文已影响3人  huicuihui

针对已经打开的页面

  1. 定义一个属性, 记录是否要更新frame。
    @property (nonatomic, assign)BOOL isUpdateFrame;
  2. viewDidLoad方法中添加观察者
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarChanged) name:UIApplicationWillChangeStatusBarFrameNotification object:nil];
  3. 观察者监听到变化之后 调用方法
- (void)statusBarChanged {
    self.isUpdateFrame = YES;
}
  1. viewDidLayoutSubviews方法中 修改子控件的frame 修改偏移影响的控件的frame。一般整体的控件是修改frame.size.height, 底部的是修改frame.origin.y。视具体情况而定。
- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    
    if (self.isUpdateFrame) {
        self.isUpdateFrame = NO;
        CGRect frame = self.wkWebview.frame;
        if ([[UIApplication sharedApplication] statusBarFrame].size.height == 40) {
            frame.size.height -= 20;
        } else {
            frame.size.height += 20;
        }
        self.wkWebview.frame = frame;
    }
}

针对新打开的页面

  1. 使用masnory或者其它的进行适配的没有这种问题
  2. 使用frame坐标的 屏幕高度使用宏定义
    iPhoneX等有刘海的屏幕手机不需要适配, 通话或连接热点等时状态栏高度不会变。只需要适配有home键的手机。
#define kscreenheight  ([UIScreen mainScreen].bounds.size.height - ([[UIApplication sharedApplication] statusBarFrame].size.height == 40 ? 20 : 0))

使用全局的 以后方便修改。

上一篇下一篇

猜你喜欢

热点阅读