WebView加载出来的网页为什么一直都处于应用的最上层

WebView加载出来的网页,一直处于应用的最上层,切换layer后webview加载的网页还是处于应用的最上层,直接覆盖了另一个层的内容,设置zorder无效,求解,谢谢

webview和videoplayerView都是另外一个surfaceview,和原来cocos其他的渲染窗口不是一个。。。所有修改morder是没有用的。

我切换layer后,webview的内容并没有被隐藏,一直处于应用的最上层,直接覆盖了下一个层的内容,这个怎么解决呢

没有自动隐藏,那你就手动把它隐藏呗= =

webView和Layer,node节点不是属于一个窗口创建出来的,通过layer去隐藏是完全无作用的,需要自己手动去隐藏掉webView或者让其不要绘制

并没什么用,用setVisible(false)和setPositionX(1000)都没用

我在onExit的时候,webview->setVisible(false)或者setPositionX(2000),都没用

把webVIew放到一个panel里面去,然后对panel设置setVisible(false)

哦哦,好的,谢谢哈

我用Layout试了,不行呢

我这边亲测是可以的……(这论坛的指定回复怎么总辣么奇怪)

我在onExit()的时候设置layout->setVisible(false),切换层的时候那个网页并没有隐藏。。不知道问题出在哪里,调试的时候这个方法明明是执行了的

你的“切换层”是什么意思,怎么做的?因为我的理解是旧层removeFromParent,新层add进来……这样即便不写onExit,网页也是会被干掉的。

并没有removeFromParent,我用的是LayerMultiplex,这个可以添加多个层到里面,然后用switchTo函数去切换,切换层的时候都会执行这个层的onEnter和onExit函数,我就在这里面设置layout->setVisible,webview是添加在layout上的,但是离开层后这个webview并没有被隐藏,还是处于界面的最上端,覆盖了新层的内容

我用layerMultiplex切换,还是可以正常移除webVIew啊……我甚至在webView所在的layer的onExit里面都没有对它进行隐藏,仅仅写了一句cc.log(“layer on Exit()”)
而且,事实上,API文档里写的也是,当调用layerMultiplex的swtichTo(n)方法时,The current (old) layer will be removed from it’s parent with ‘cleanup:YES’. 这个跟调用removeFromParent(true);道理应该是一样的。

能否加个Q详谈,471924174

没法用qq……

额。。。,当我手动remove的时候是可以移除,但是我不想移除它,我想切换回这个层的时候能重新显示网页,所以用了setVisible,只是怎么设置都没用

`var WebLayer = cc.Layer.extend({
	panel: null,
	ctor: function () {
		this._super();
		this.loadJson();
	},
	loadJson: function () {
		var root = ccs.load(res.WebTestLayer_json).node;
		this.panel = ccui.helper.seekWidgetByName(root, "panel");
		var _web = new ccui.WebView("http://www.baidu.com");
		_web.setContentSize(this.panel.width, this.panel.height);
		this.panel.addChild(_web);
		//_web.removeFromParent();
		//_panel.setVisible(false);
		this.addChild(root);
	},
	onExit: function () {
		cc.log("layer on Exit");
		//这句不用写,切换时依旧可以正常“隐藏”webView,重新回来还可以看见webView
		//this.panel.setVisible(false);
	}
});
var HelloWorldScene = cc.Scene.extend({
	armature: null,
	layer: null,
	layerMultiplex: null,
    onEnter: function () {
        this._super();
		var temp=this;
		var _layers = [new WebLayer(), new ProgressLayer()];
       	this.layerMultiplex = new cc.LayerMultiplex(_layers);
		this.layerMultiplex.switchTo(0);
		this.addChild(this.layerMultiplex);
		this.scheduleOnce(function () {
			temp.layerMultiplex.switchTo(1);
			temp.scheduleOnce(function () {
				temp.layerMultiplex.switchTo(0);
			}, 3);
		}, 2);
    }
});`

看来只能上代码了……

你用的是js?我的用的是C艹,我switchTo到别的层的时候,old layer的其他控件是消失了的,就是这个webView的网页跟随着进了新的层,这是我关键部分代码,其他太多不方便贴出来

void JudgeLayer::publishJudge(std::string publishID)
{
auto layer = Layout::create();
layer->setTag(555);
// string ip = LogicManager::getInstance()->getIpAddress();
// string url = “http://” + ip + “/paperless_gfzq/index.php/apipage/judge_api_detail_table/” + publishID;
auto webView = WebView::create();
// webView->setTag(555);
webView->setPosition(this->getContentSize()/2);
webView->setContentSize(this->getContentSize());
webView->loadURL(“http://www.baidu.com”);
layer->addChild(webView);
webView->setScalesPageToFit(true);
this->addChild(layer);
}

void JudgeLayer::onEnter()
{
auto child = this->getChildByTag(555);
if(child)
child->setVisible(true);
}

void JudgeLayer::onExit()
{
auto child = this->getChildByTag(555);
if(child)
child->setVisible(false);
}

调试的时候child->setVisible(false);是执行了的,但是网页还是跟着进入到下一层并没有消失,如果把这句换成child->removeFromParent(),切换的时候倒是能让网页消失,只是再切换回来的时候就看不到网页了