美文网首页
cocos creator再iPhone X刘海机上的适配

cocos creator再iPhone X刘海机上的适配

作者: Jey | 来源:发表于2019-01-15 16:23 被阅读56次

在RootViewController设置安全区域safeAreaInsets,有关这个可以查资料了解下

// 适配iPhone X系列,设置安全区域
- (void)viewSafeAreaInsetsDidChange {
    
    [super viewSafeAreaInsetsDidChange];
    NSLog(@"viewSafeAreaInsetsDidChange %@",NSStringFromUIEdgeInsets(self.view.safeAreaInsets));

    [self updateOrientation];
}
bool changeViewFrame = false;
- (void)updateOrientation {
    if (@available(iOS 11.0, *)) {
        if (IPHONE_X) {
            if (self.view and !changeViewFrame) {
//                CGRect s = CGRectMake(self.view.safeAreaInsets.left, Bottom_Safe_Height, self.view.frame.size.width - self.view.safeAreaInsets.left - self.view.safeAreaInsets.right,
//                                      self.view.frame.size.height - self.view.safeAreaInsets.bottom -self.view.safeAreaInsets.top/2);
                CGRect s = CGRectMake(self.view.safeAreaInsets.left, Status_Height, kScreenWidth - self.view.safeAreaInsets.left - self.view.safeAreaInsets.right,
                                      kScreenHeight - self.view.safeAreaInsets.bottom -self.view.safeAreaInsets.top);
                self.view.frame = s;
                // 只需要记录一次,因为每次change view frame 都会改变一次这个
                changeViewFrame = true;
            }
        }
    }
}

设置完这里如果碰到输入框还是有问题,要修改:CCEAGLView-ios.mm

- (id) initWithFrame:(CGRect)frame pixelFormat:(NSString*)format depthFormat:(GLuint)depth preserveBackbuffer:(BOOL)retained sharegroup:(EAGLSharegroup*)sharegroup multiSampling:(BOOL)sampling numberOfSamples:(unsigned int)nSamples;
{
    if((self = [super initWithFrame:frame]))
    {
        isUseUITextField = YES;
        pixelformat_ = format;
        depthFormat_ = depth;
        multiSampling_ = sampling;
        requestedSamples_ = nSamples;
        preserveBackbuffer_ = retained;
        markedText_ = nil;
        if( ! [self setupSurfaceWithSharegroup:sharegroup] ) {
            [self release];
            return nil;
        }


        originalRect_ = self.frame;
        self.keyboardShowNotification = nil;

        if ([self respondsToSelector:@selector(setContentScaleFactor:)])
        {
            self.contentScaleFactor = [[UIScreen mainScreen] scale];
        }
    }

    return self;
}

改后:

- (id) initWithFrame:(CGRect)frame pixelFormat:(NSString*)format depthFormat:(GLuint)depth preserveBackbuffer:(BOOL)retained sharegroup:(EAGLSharegroup*)sharegroup multiSampling:(BOOL)sampling numberOfSamples:(unsigned int)nSamples;
{
    if (@available(iOS 11.0, *)) {
        if ([[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom > 0.0) {
            CGSize screenSize = ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)] ? CGSizeMake([UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale,[UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale) : [UIScreen mainScreen].bounds.size);
            frame = CGRectMake(0, 44, screenSize.width, screenSize.height - 44 - 34);  // 上面44
        }
    }
    if((self = [super initWithFrame:frame]))
    {
        isUseUITextField = YES;
        pixelformat_ = format;
        depthFormat_ = depth;
        multiSampling_ = sampling;
        requestedSamples_ = nSamples;
        preserveBackbuffer_ = retained;
        markedText_ = nil;
        if( ! [self setupSurfaceWithSharegroup:sharegroup] ) {
            [self release];
            return nil;
        }


        originalRect_ = self.frame;
        self.keyboardShowNotification = nil;

        if ([self respondsToSelector:@selector(setContentScaleFactor:)])
        {
            self.contentScaleFactor = [[UIScreen mainScreen] scale];
        }
    }

    return self;
}

亲测ok~~~

相关文章

网友评论

      本文标题:cocos creator再iPhone X刘海机上的适配

      本文链接:https://www.haomeiwen.com/subject/unuydqtx.html