using Shared; using System; using System.Collections.Generic; using System.Text; namespace HDL_ON.Stan { /// /// 做成一个上下可以滑动的列表控件(它会调整高度,无桌布) /// public class VerticalListControl : VerticalScrolViewLayout { #region ■ 变量声明___________________________ /// /// 行之间的间距 /// public int rowSpace = 0; /// /// 最大高度 /// private int maxHeight = -1; /// /// 一个没什么用的东西 /// private FrameLayout frameBackTemp = null; /// /// 自定义的获取子控件个数 /// public new int ChildrenCount { get { int count = base.ChildrenCount; if (frameBackTemp != null && frameBackTemp.Parent != null) { count--; } return count < 0 ? 0 : count; } } #endregion #region ■ 初始化_____________________________ /// /// 做成一个上下可以滑动的列表控件(它会调整高度,无桌布) /// /// 行之间的间距(这个值是与行控件绑定一起使用的) public VerticalListControl(int i_rowSpace = 0) { this.rowSpace = Application.GetRealHeight(i_rowSpace); #if __IOS__ //自动偏移取消 if (UIKit.UIDevice.CurrentDevice.CheckSystemVersion(11, 0)) { (this.uiView as UIKit.UIScrollView).ContentInsetAdjustmentBehavior = UIKit.UIScrollViewContentInsetAdjustmentBehavior.Never; } #endif } #endregion #region ■ 添加子控件_________________________ /// /// 添加子控件(FrameRowControl,RowLayoutControl会改变高度) /// /// public override void AddChidren(View view) { base.AddChidren(view); if (view is FrameRowControl || view is RowLayoutControl) { if (rowSpace > 0) { view.Height += rowSpace; } } if (maxHeight == -1) { maxHeight = this.Height; } } #endregion #region ■ 调整真实高度_______________________ /// /// 还原高度 /// public void RecoverHeight() { if (this.maxHeight != -1) { this.Height = this.maxHeight; #if __IOS__ this.ReLocation(); #endif } } /// /// 调整控件真实高度(只针对行控件都是相同高度的,高度只会减少,不会增加) /// /// 底部空白间距(真实值) /// 当真实高度超过原有高度时,是否添加空白 public void AdjustRealHeight(int bottomSpace, bool addSpace = true) { //总之,先重置至最大 this.RecoverHeight(); int count = this.ChildrenCount; if (count <= 0) { frameBackTemp?.RemoveFromParent(); frameBackTemp = null; return; } //调整列表控件的高度 var realHeight = count * this.GetChildren(0).Height + bottomSpace; if (realHeight < this.Height) { frameBackTemp?.RemoveFromParent(); frameBackTemp = null; //缩小控件高度 this.Height = realHeight; #if __IOS__ this.ReLocation(); #endif } else if (addSpace == true && bottomSpace > 0 && realHeight > this.maxHeight) { frameBackTemp?.RemoveFromParent(); frameBackTemp = new FrameLayout(); frameBackTemp.Height = bottomSpace; this.AddChidren(frameBackTemp); } } /// /// 针对底部点击按钮,调整控件真实高度 /// /// 底部空白间距(真实值,如果列表控件真实高度没有超过时,使用此值) /// Y轴补正值(真实值,列表控件不在bodyFramelayout的时候使用) public void AdjustRealHeightByBottomButton(int bottomSpace, int correctionsValue = 0) { if (this.ChildrenCount == 0) { frameBackTemp?.RemoveFromParent(); frameBackTemp = null; if (maxHeight != -1) { //还原为最大高度 this.Height = maxHeight; #if __IOS__ this.ReLocation(); #endif } return; } var realHeight = this.ChildrenCount * this.GetChildren(0).Height + this.Y + correctionsValue; var btnTemp = new BottomClickButton(); if (btnTemp.Yaxis >= realHeight) { //没有超过 this.AdjustRealHeight(bottomSpace); return; } //超过时,重置至最大 this.RecoverHeight(); //添加临时控件,直至可以滑动超过底部按钮 frameBackTemp?.RemoveFromParent(); frameBackTemp = new FrameLayout(); frameBackTemp.Height = HdlControlResourse.BodyFrameHeight - btnTemp.Yaxis + bottomSpace; this.AddChidren(frameBackTemp); } #endregion #region ■ 一般方法___________________________ /// /// 控件移除 /// public override void RemoveFromParent() { if (this.Parent != null) { base.RemoveFromParent(); } } /// /// ☆☆移除全部控件☆☆ /// public override void RemoveAll() { if (this.Parent != null) { base.RemoveAll(); } } #endregion } }