【发布时间】:2021-02-05 01:40:11
【问题描述】:
当包含正在自定义的ListView 的页面消失时,以下崩溃。错误表明我的观察者没有被处理掉。
public class ChatListViewRenderer : ListViewRenderer
{
private IDisposable _onContentSizeChangedObserver;
private IDisposable _onFrameChangedObserver;
protected override void OnElementChanged(ElementChangedEventArgs<ListView> e)
{
base.OnElementChanged(e);
if (Control == null) return;
_onContentSizeChangedObserver = Control.AddObserver(new NSString("contentSize"), NSKeyValueObservingOptions.OldNew, OnContentSizeChanged);
_onFrameChangedObserver = Control.AddObserver(new NSString("frame"), NSKeyValueObservingOptions.OldNew, OnFrameChanged);
}
protected override void Dispose(bool disposing)
{
_onContentSizeChangedObserver.Dispose();
_onFrameChangedObserver.Dispose();
base.Dispose(disposing);
}
}
更新
我在包含ListView 的页面的PageRenderer 中尝试了ViewWillDisapear,但问题仍然存在。
public override void ViewWillDisappear(bool animated)
{
base.ViewWillDisappear(animated);
var listRenderer = Platform.CreateRenderer(((MessagesPage)Element).MessagesList) as ChatListViewRenderer;
listRenderer._onContentSizeChangedObserver.Dispose();
listRenderer._onFrameChangedObserver.Dispose();
}
【问题讨论】: