From cbc156bc38d8b8eae7aef60cb186ab2b52fa701f Mon Sep 17 00:00:00 2001 From: wxr <wxr@hdlchina.com.cn> Date: 星期二, 16 七月 2024 13:59:56 +0800 Subject: [PATCH] 增加全部挂断 --- HDL-ON_iOS/ViewControllerBase.cs | 84 ++++++++++++++++++++++++------------------ 1 files changed, 48 insertions(+), 36 deletions(-) diff --git a/HDL-ON_iOS/ViewControllerBase.cs b/HDL-ON_iOS/ViewControllerBase.cs index 053c35c..36d7bdd 100644 --- a/HDL-ON_iOS/ViewControllerBase.cs +++ b/HDL-ON_iOS/ViewControllerBase.cs @@ -2,7 +2,7 @@ using System.Drawing; using Foundation; using UIKit; - +using WebKit; namespace HDL_ON_iOS { public class ViewControllerBase : Shared.BaseViewController @@ -31,50 +31,54 @@ // } //} - public override void ViewDidLoad () + public override void ViewDidLoad() { - base.ViewDidLoad (); + base.ViewDidLoad(); //璁剧疆閿洏浜嬩欢澶勭悊绋嬪簭 - RegisterForKeyboardNotifications (); + RegisterForKeyboardNotifications(); } - protected virtual void RegisterForKeyboardNotifications () + protected virtual void RegisterForKeyboardNotifications() { _keyboardObserverWillShow = NSNotificationCenter.DefaultCenter.AddObserver (UIKeyboard.WillShowNotification, KeyboardWillShowNotification); _keyboardObserverWillHide = NSNotificationCenter.DefaultCenter.AddObserver (UIKeyboard.WillHideNotification, KeyboardWillHideNotification); } - protected virtual void UnregisterKeyboardNotifications () + protected virtual void UnregisterKeyboardNotifications() { - NSNotificationCenter.DefaultCenter.RemoveObserver (_keyboardObserverWillShow); - NSNotificationCenter.DefaultCenter.RemoveObserver (_keyboardObserverWillHide); + NSNotificationCenter.DefaultCenter.RemoveObserver(_keyboardObserverWillShow); + NSNotificationCenter.DefaultCenter.RemoveObserver(_keyboardObserverWillHide); } - protected virtual UIView KeyboardGetActiveView () + protected virtual UIView KeyboardGetActiveView() { - return this.View.FindFirstResponder (); + return this.View.FindFirstResponder(); } - protected virtual void KeyboardWillShowNotification (NSNotification notification) + protected virtual void KeyboardWillShowNotification(NSNotification notification) { - UIView activeView = KeyboardGetActiveView (); + UIView activeView = KeyboardGetActiveView(); if (activeView == null) return; - UIView scrollView = activeView.FindSuperviewOfType_Self (this.View, typeof (UIView)) as UIView; + string sss = activeView.ToString(); + if (sss.StartsWith("<WKContentView")) + return; + UIView scrollView = activeView.FindSuperviewOfType_Self(this.View, typeof(UIView)) as UIView; if (scrollView == null) return; - CoreGraphics.CGRect keyboardBounds = UIKeyboard.BoundsFromNotification (notification); + CoreGraphics.CGRect keyboardBounds = UIKeyboard.BoundsFromNotification(notification); //UIEdgeInsets contentInsets = new UIEdgeInsets (0.0f, 0.0f, keyboardBounds.Size.Height, 0.0f); //scrollView.ContentInset = contentInsets; //scrollView.ScrollIndicatorInsets = contentInsets; - CoreGraphics.CGRect viewRectAboveKeyboard = new CoreGraphics.CGRect (this.View.Frame.Location, - new CoreGraphics.CGSize (this.View.Frame.Width, this.View.Frame.Size.Height - keyboardBounds.Size.Height)); - CoreGraphics.CGRect activeFieldAbsoluteFrame = activeView.Superview.ConvertRectToView (activeView.Frame, this.View); - if (!viewRectAboveKeyboard.Contains (activeFieldAbsoluteFrame)) { + CoreGraphics.CGRect viewRectAboveKeyboard = new CoreGraphics.CGRect(this.View.Frame.Location, + new CoreGraphics.CGSize(this.View.Frame.Width, this.View.Frame.Size.Height - keyboardBounds.Size.Height)); + CoreGraphics.CGRect activeFieldAbsoluteFrame = activeView.Superview.ConvertRectToView(activeView.Frame, this.View); + if (!viewRectAboveKeyboard.Contains(activeFieldAbsoluteFrame)) + { //PointF scrollPoint = new PointF (0.0f, // (float)(activeFieldAbsoluteFrame.Location.Y + activeFieldAbsoluteFrame.Height // + scrollView.ContentOffset.Y - viewRectAboveKeyboard.Height)); // scrollView.SetContentOffset (scrollPoint, true); - scrollView.Bounds = new CoreGraphics.CGRect (0.0f, + scrollView.Bounds = new CoreGraphics.CGRect(0.0f, (float)(activeFieldAbsoluteFrame.Location.Y + activeFieldAbsoluteFrame.Height + scrollView.Frame.Y - viewRectAboveKeyboard.Height) , this.View.Frame.Width, this.View.Frame.Height); @@ -82,55 +86,63 @@ //if (this.View.Frame.Height - activeView.Frame.Bottom < keyboardBounds.Size.Height) // scrollView.Bounds = new CoreGraphics.CGRect (0.0f, this.View.Frame.Height - activeView.Frame.Height - keyboardBounds.Size.Height, this.View.Frame.Width, this.View.Frame.Height); } - protected virtual void KeyboardWillHideNotification (NSNotification notification) + protected virtual void KeyboardWillHideNotification(NSNotification notification) { - UIView activeView = KeyboardGetActiveView (); + UIView activeView = KeyboardGetActiveView(); if (activeView == null) return; - UIView scrollView = activeView.FindSuperviewOfType_Self (this.View, typeof (UIView)) as UIView; + string sss = activeView.ToString(); + if (sss.StartsWith("<WKContentView")) + return; + UIView scrollView = activeView.FindSuperviewOfType_Self(this.View, typeof(UIView)) as UIView; if (scrollView == null) return; - double animationDuration = UIKeyboard.AnimationDurationFromNotification (notification); + double animationDuration = UIKeyboard.AnimationDurationFromNotification(notification); //UIEdgeInsets contentInsets = new UIEdgeInsets (0.0f, 0.0f, 0.0f, 0.0f); //UIView.Animate (animationDuration, delegate { // scrollView.ContentInset = contentInsets; // scrollView.ScrollIndicatorInsets = contentInsets; //}); - scrollView.Bounds = new CoreGraphics.CGRect (0.0f, 0.0f, this.View.Frame.Width, this.View.Frame.Height); - + scrollView.Bounds = new CoreGraphics.CGRect(0.0f, 0.0f, this.View.Frame.Width, this.View.Frame.Height); + } } public static class ViewExtensions { - public static UIView FindFirstResponder (this UIView view) + public static UIView FindFirstResponder(this UIView view) { - if (view.IsFirstResponder) { + if (view.IsFirstResponder) + { return view; } - foreach (UIView subView in view.Subviews) { - var firstResponder = subView.FindFirstResponder (); + foreach (UIView subView in view.Subviews) + { + var firstResponder = subView.FindFirstResponder(); if (firstResponder != null) return firstResponder; } return null; } - public static UIView FindSuperviewOfType (this UIView view, UIView stopAt, Type type) + public static UIView FindSuperviewOfType(this UIView view, UIView stopAt, Type type) { - if (view.Superview != null) { - if (type.IsAssignableFrom (view.Superview.GetType ())) { + if (view.Superview != null) + { + if (type.IsAssignableFrom(view.Superview.GetType())) + { return view.Superview; } if (view.Superview != stopAt) - return view.Superview.FindSuperviewOfType (stopAt, type); + return view.Superview.FindSuperviewOfType(stopAt, type); } return null; } - public static UIView FindSuperviewOfType_Self (this UIView view, UIView stopAt, Type type) + public static UIView FindSuperviewOfType_Self(this UIView view, UIView stopAt, Type type) { - if (view.Superview != null) { - return view.Superview.FindSuperviewOfType_Self (stopAt, type); + if (view.Superview != null) + { + return view.Superview.FindSuperviewOfType_Self(stopAt, type); } return view; } -- Gitblit v1.8.0