From 9c16d3614d9b88c637f967518a329f239fcd3aaf Mon Sep 17 00:00:00 2001
From: lss <316519258@qq.com>
Date: 星期五, 12 六月 2020 09:22:04 +0800
Subject: [PATCH] 2020.06.12

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/ListViewLayoutControls/VerticalFrameControl.cs |  152 ++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 122 insertions(+), 30 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/ListViewLayoutControls/VerticalFrameControl.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/ListViewLayoutControls/VerticalFrameControl.cs
index f0f6360..d307b28 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/ListViewLayoutControls/VerticalFrameControl.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/ListViewLayoutControls/VerticalFrameControl.cs
@@ -5,7 +5,7 @@
 namespace Shared.Phone.UserCenter
 {
     /// <summary>
-    /// 鍋氭垚涓�涓噷闈㈠彧瑁匜rameLayout鐨勫垪琛ㄥ瀷鎺т欢(瀹冧笉浼氳皟鏁撮珮搴�)
+    /// 鍋氭垚涓�涓噷闈㈠彧瑁匜rameLayout鐨勫垪琛ㄥ瀷鎺т欢(瀹冧笉浼氳皟鏁撮珮搴�,鏈夋甯�)
     /// </summary>
     public class VerticalFrameControl : VerticalScrolViewLayout
     {
@@ -18,7 +18,23 @@
         /// <summary>
         /// 妗屽竷鎺т欢
         /// </summary>
-        private FrameLayout frameTable = null;
+        private FrameLayout m_frameTable = null;
+        /// <summary>
+        /// 妗屽竷鎺т欢(杩欎釜涓滆タ涓嶈兘鍒狅紝鍥犱负鏈変簺鐣岄潰闇�瑕佷粬鐨勬甯�)
+        /// </summary>
+        public FrameLayout frameTable
+        {
+            get
+            {
+                if (m_frameTable == null) { this.InitFrameTable(); }
+                return m_frameTable;
+            }
+        }
+
+        /// <summary>
+        /// 涓�涓复鏃剁殑涓滆タ
+        /// </summary>
+        private FrameLayout frameBackTemp = null;
 
         #endregion
 
@@ -31,6 +47,13 @@
         public VerticalFrameControl(int i_rowSpace = 0)
         {
             rowSpace = Application.GetRealHeight(i_rowSpace);
+#if iOS
+            //鑷姩鍋忕Щ鍙栨秷
+            if (UIKit.UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
+            {
+                (this.uiView as UIKit.UIScrollView).ContentInsetAdjustmentBehavior = UIKit.UIScrollViewContentInsetAdjustmentBehavior.Never;
+            }
+#endif
         }
 
         /// <summary>
@@ -38,14 +61,14 @@
         /// </summary>
         private void InitFrameTable()
         {
-            if (this.frameTable != null)
+            if (this.m_frameTable != null && this.m_frameTable.Parent != null)
             {
                 return;
             }
-            this.frameTable = new FrameLayout();
-            this.frameTable.Width = this.Width;
-            this.frameTable.Height = this.Height;
-            this.AddChidren(this.frameTable);
+            this.m_frameTable = new FrameLayout();
+            this.m_frameTable.Width = this.Width;
+            this.m_frameTable.Height = this.Height;
+            base.AddChidren(this.m_frameTable);
         }
 
         #endregion
@@ -53,24 +76,25 @@
         #region 鈻� 娣诲姞瀛愭帶浠禵________________________
 
         /// <summary>
-        /// 娣诲姞Frame瀛愭帶浠�
+        /// 娣诲姞Frame瀛愭帶浠�(娉ㄦ剰,瀹冩槸寰�涓嬪姞鎺т欢,鍙細鏀瑰彉鍧愭爣,妗屽竷澶у皬浼氬鍔�)
         /// </summary>
         /// <param name="view"></param>
-        public void AddChidrenFrame(FrameLayout frame)
+        public override void AddChidren(View view)
         {
             //鍒濆鍖栨甯冩帶浠�
             this.InitFrameTable();
 
-            var child = this.frameTable.GetChildren(this.frameTable.ChildrenCount - 1);
-            if (child != null)
+            //鑾峰彇鍧愭爣搴曢儴鏈�涓嬮潰鐨勯偅涓帶浠剁殑搴曢儴鍧愭爣
+            int value = this.GetLocationMostLastViewBottom(this.m_frameTable);
+            if (value != -1)
             {
-                frame.Y = child.Bottom + rowSpace;
+                view.Y = value + rowSpace;
             }
-            this.frameTable.AddChidren(frame);
+            this.m_frameTable.AddChidren(view);
             //璋冩暣妗屽竷楂樺害
-            if (this.frameTable.Height < frame.Bottom)
+            if (this.m_frameTable.Height < view.Bottom)
             {
-                this.frameTable.Height = frame.Bottom;
+                this.m_frameTable.Height = view.Bottom;
             }
         }
 
@@ -79,20 +103,36 @@
         #region 鈻� 涓�鑸柟娉昣__________________________
 
         /// <summary>
-        /// 璋冩暣瀛怓rameLayout鐨勯珮搴�
+        /// 璋冩暣瀛怓rameLayout鐨勯珮搴�(鍙墿澶�,涓嶇缉灏�)
         /// </summary>
         /// <param name="frame"></param>
         /// <param name="buttomSpace">搴曢儴绌虹櫧闂磋窛(鐪熷疄鍊�)</param>
         public void AdjustChidrenFrameHeight(FrameLayout frame, int buttomSpace)
         {
-            var child = frame.GetChildren(frame.ChildrenCount - 1);
-            if (child != null)
+            //鑾峰彇鍧愭爣搴曢儴鏈�涓嬮潰鐨勯偅涓帶浠剁殑搴曢儴鍧愭爣
+            int value = this.GetLocationMostLastViewBottom(frame);
+            if (value != -1)
             {
                 //璋冩暣妗屽竷楂樺害
-                if (frame.Height < child.Bottom + buttomSpace)
+                if (frame.Height < value + buttomSpace)
                 {
-                    frame.Height = child.Bottom + buttomSpace;
+                    frame.Height = value + buttomSpace;
                 }
+            }
+        }
+
+        /// <summary>
+        /// 璋冩暣瀛怓rameLayout鐨勭湡瀹為珮搴�
+        /// </summary>
+        /// <param name="frame"></param>
+        public void AdjustChidrenFrameRealHeight(FrameLayout frame)
+        {
+            //鑾峰彇鍧愭爣搴曢儴鏈�涓嬮潰鐨勯偅涓帶浠剁殑搴曢儴鍧愭爣
+            int value = this.GetLocationMostLastViewBottom(frame);
+            if (value != -1)
+            {
+                //璋冩暣妗屽竷楂樺害
+                frame.Height = value;
             }
         }
 
@@ -101,33 +141,85 @@
         /// </summary>
         public void AdjustTableHeight()
         {
-            var child = this.frameTable?.GetChildren(this.frameTable.ChildrenCount - 1);
-            if (child != null)
+            //2020.05.25杩藉姞
+            if (this.frameBackTemp != null && this.frameBackTemp.Parent != null)
+            {
+                this.frameBackTemp.RemoveFromParent();
+            }
+
+            //鑾峰彇鍧愭爣搴曢儴鏈�涓嬮潰鐨勯偅涓帶浠剁殑搴曢儴鍧愭爣
+            int value = this.GetLocationMostLastViewBottom(this.m_frameTable);
+            if (value != -1)
             {
                 //璋冩暣妗屽竷楂樺害
-                if (this.frameTable.Height < child.Bottom)
-                {
-                    this.frameTable.Height = child.Bottom;
-                }
+                this.m_frameTable.Height = value;
+            }
+            else
+            {
+                //杩樺師涓哄師鏉ョ殑楂樺害
+                this.RecoverTableHeight();
             }
         }
 
         /// <summary>
         /// 閽堝搴曢儴鐐瑰嚮鎸夐挳,璋冩暣鎺т欢鐪熷疄楂樺害
         /// </summary>
-        /// <param name="correctionsValue">Y杞磋ˉ姝e��(鐪熷疄鍊�,鍒楄〃鎺т欢涓嶅湪bodyFramelayout鐨勬椂鍊欎娇鐢�)</param>
+        /// <param name="correctionsValue">
+        /// <para>Y杞磋ˉ姝e��(鐪熷疄鍊�,鍒楄〃鎺т欢涓嶅湪bodyFramelayout鐨勬椂鍊欎娇鐢�)</para>
+        /// <para>涓�鑸负姝f暟,濡傛灉涓鸿礋鏁颁唬琛╞odyFramelayout瓒呭嚭浜嗛《閮�</para>
+        /// </param>
         public void AdjustRealHeightByBottomButton(int correctionsValue = 0)
         {
+            //璋冩暣妗屽竷楂樺害 2020.05.25杩藉姞
+            this.AdjustTableHeight();
+
             var btnTemp = new BottomClickButton();
-            if (btnTemp.Yaxis >= this.frameTable.Height + correctionsValue)
+            if (btnTemp.Yaxis >= this.m_frameTable.Height + correctionsValue)
             {
                 //娌℃湁瓒呰繃
                 return;
             }
             //娣诲姞涓存椂鎺т欢,鐩磋嚦鍙互婊戝姩瓒呰繃搴曢儴鎸夐挳
-            var frameBackTemp = new FrameLayout();
+            int oldRowSpace = this.rowSpace;
+            this.rowSpace = 0;
+
+            this.frameBackTemp = new FrameLayout();
             frameBackTemp.Height = ControlCommonResourse.BodyFrameHeight - btnTemp.Yaxis + Application.GetRealHeight(23);
-            this.AddChidrenFrame(frameBackTemp);
+            this.AddChidren(frameBackTemp);
+
+            this.rowSpace = oldRowSpace;
+        }
+
+        /// <summary>
+        /// 杩樺師妗屽竷楂樺害
+        /// </summary>
+        public void RecoverTableHeight()
+        {
+            if (this.m_frameTable != null)
+            {
+                m_frameTable.Height = this.Height;
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍧愭爣搴曢儴鏈�涓嬮潰鐨勯偅涓帶浠剁殑搴曢儴鍧愭爣
+        /// </summary>
+        /// <returns></returns>
+        private int GetLocationMostLastViewBottom(FrameLayout frame)
+        {
+            int bottomHeight = -1;
+
+            if (frame == null) { return bottomHeight; }
+           
+            for (int i = 0; i < frame.ChildrenCount; i++)
+            {
+                var child = frame.GetChildren(i);
+                if (child.Bottom > bottomHeight)
+                {
+                    bottomHeight = child.Bottom;
+                }
+            }
+            return bottomHeight;
         }
 
         #endregion

--
Gitblit v1.8.0