目的是实现这个,代码放下面
已经测试十几台设备包括pad没问题
以Max聚合为例
展示(关闭)Banner的时候调用Show,Banner加载成功回调里调用RefreshSizeDelta
最终获得是像素
所以UGUI的Canvas使用Constant Pixel Size模式,Reference Pixels Per默认100
结构
ButtomBanner(适配高度)在CloseBanner(显示高度)线的下面,调整CloseBanner来满足这个就行,这样当ButtomBanner为准确banner的高度,线刚好在banner之上
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class BannerRemoveAD : MonoBehaviour
{
public Button closeBtn;
public RectTransform rectTransform;
// Start is called before the first frame update
void Start()
{
closeBtn.onClick.AddListener(ClickClose);
}
public void RefreshSizeDelta()
{
rectTransform.sizeDelta = new Vector2(0, StaticBannerHeight(0));
}
public void Show(bool show)
{
gameObject.Active(show);
if (show&&rectTransform.sizeDelta.y<0)
{
if (BannerLoaded)
{
RefreshSizeDelta();
}
}
}
public static float StaticBannerHeight(float addValue = 0f)
{
#if !UNITY_EDITOR
if (!AdsManager.instance.BannerLoaded)
{
return -200;
}
#else
return 180;
#endif
var heightDp = MaxSdkUtils.GetAdaptiveBannerHeight();//获取dp
var density = MaxSdkUtils.GetScreenDensity();
var heightPx = heightDp * density;//dp根据屏幕密度转px(像素)
return heightPx+addValue;
}
private void ClickClose()
{
-----ShowRemoveAdPopWnd();
}
}