十万火急,iphoneX适配问题(Editbox)

目前游戏已经适配iphoneX 为居中,在安全区内如下图


但是,当我点击editbox,准备输入聊天内容的时候,出现如下图的 情况,游戏画布整个往左移动了

请问如何解决这个问题呢? 急!急!急!

3赞

难以置信!EditBox 问题真的多

明天我再问一下团队。EditBox真的是非常难搞,每个系统版本、每个厂商的安卓定制版都不一样,就没有一个类似OpenGL的行业标准出来。就算我们这个版本适配好了,操作系统一更新版本又出问题。

9赞

有没什么方法能设置键盘的弹出方式,不移动游戏画布,直接覆盖在上面的,(发现,输入框比 弹出的键盘高的时候,没有画布移位的问题)

你可以打开一个HTML5页面 ,在那里做输入。 我以前是这样干的。

嘗試修改 CCEAGLView-ios 裡的 originalRect_
把 originalRect_.origin.x 跟 originalRect_.origin.y 都設成0看看

##EditBox的willShow跟willEnd方法中,只要调用了doAnimationWhenKeyboardMove方法,就会出现画布移动。可以注释掉,不调用该函数,就解决了。但是这样的话,有可能会出现软键盘挡住输入框的情况。

1赞

改进方案:修改cocos底层 文件夹目录 cocos2d-x-3.16/cocos/platform/ios/CCEAGLView-ios.mm 的doAnimationWhenKeyboardMoveWithDuration方法的实现,修改 self.frame的值为适配之后带安全区的值。

1赞

出现在安全区域是如何做到的

在rootViewController应该有调整过self.view.frame的,参考https://github.com/biganans/cocos2x-adaptation。
UIWindow* window = [[UIApplication sharedApplication] keyWindow]
用window来替代self.view

请问你是解决了还是没解决呢?

有解决吗

可参考乱世王者

帮顶 这个确实一直都有问题。目前凑合还能用 体验确实差

貌似这个问题目前还没有什么好的解决方案。我这两天正好改造一个老的 cocos2d-x 3.3 引擎的项目也碰到了这个问题,并且界面布局是用 cocosbuilder 做的,折腾了好久才搞定。说实话,网上的资料不多。

有两种解决方案:

  1. 把 openGL 的绘制区缩小(这个能一次性解决布局问题,但是可能达不到苹果的要求,最终还是得搞个全屏的底图,如果界面比较多就会很麻烦,editbox 的问题如同之前的人说,需要修改cocos/platform/ios/CCEAGLView-ios.mm文件中的doAnimationWhenKeyboardMoveWithDuration函数,重新设置安全区,这个需要在开始的时候把安全区保存起来,到这里来设置)
  2. 引擎中增加安全区的设置和获取,然后根据界面去适配(好处是代码掌控力比较强,但是如果界面多的话会比较累。cocosbuilder 的话相对还比较简单,只需要修改 CCBReader.cpp 文件,把 Director::getInstance()->getWinSize() 这个改成拿安全区的大小即可,这样得到的 Node 就是安全区大小的,否则会是全屏把刘海吃掉,添加到界面的时候也需要修正增加左和下方的安全区偏移量,可以考虑在 Node 的基类中增加一个 addChildInSafeArea 的函数,就是偏移一个x和y,然后再调用原来的 addChild 即可)

最新的 3.17 引擎还没去看,老项目升级引擎也很麻烦,因为源码改动较多。唉。

我解决的方案:CCEAGLView viewWithFrame: CGRectMake(safeLeft,0,你的宽度,你的高度)