You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS UIScrollView对应Android OnDraw方法及ScrollViewRenderer相关技术问询

iOS ScrollViewRenderer 替代 Android OnDraw 的实现方案

问题1:替代Draw的正确方式

iOS的Draw(CGRect rect)仅在视图初始化或调用SetNeedsDisplay()时触发,不会随滚动自动调用。你需要监听原生UIScrollView的滚动事件,在滚动时触发重绘:

  1. 在Renderer的OnElementChanged方法中,给原生Control(即UIScrollView)绑定滚动事件:
protected override void OnElementChanged(ElementChangedEventArgs<ScrollView> e)
{
    base.OnElementChanged(e);
    if (Control != null)
    {
        Control.Scrolled += OnScrollViewScrolled;
    }
}
  1. 实现滚动事件处理方法,调用SetNeedsDisplay()触发重绘:
private void OnScrollViewScrolled(object sender, EventArgs e)
{
    SetNeedsDisplay();
}

这样每次滚动时,Draw(CGRect rect)就会被调用,和Android的OnDraw行为一致。

问题2:获取绘图用的"Canvas"

在iOS的Draw方法中,你可以通过UIGraphics.GetCurrentContext()获取CGContext对象,它就相当于Android的Canvas,支持绘制位图、路径等操作。示例代码:

public override void Draw(CoreGraphics.CGRect rect)
{
    base.Draw(rect);
    using (var context = UIGraphics.GetCurrentContext())
    {
        // 这里用context执行绘图逻辑,比如绘制位图
        var image = UIImage.FromFile("scroll_bitmap.png");
        image.Draw(new CGRect(0, Control.ContentOffset.Y, image.Size.Width, image.Size.Height));
    }
}

问题3:获取当前ScrollY值

iOS原生UIScrollView的ContentOffset.Y属性就是当前的垂直滚动偏移量,对应Android的ScrollY。你可以在Renderer中直接通过Control.ContentOffset.Y获取,比如在滚动事件或Draw方法中使用。

内容的提问来源于stack exchange,提问作者jho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:24:25