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
}
}