目的是实现这个,代码放下面
已经测试十几台设备包括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 updatevoid 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_EDITORif (!AdsManager.instance.BannerLoaded){return -200;}
#elsereturn 180;
#endifvar heightDp = MaxSdkUtils.GetAdaptiveBannerHeight();//获取dpvar density = MaxSdkUtils.GetScreenDensity();var heightPx = heightDp * density;//dp根据屏幕密度转px(像素)return heightPx+addValue;}private void ClickClose(){-----ShowRemoveAdPopWnd();}
}