我有一个自定义视图,以前是一个网格,但我已经改变了它的类继承视图,因为这对我来说似乎是正确的事情做的基础上,我已经阅读在线。
- 此自定义视图包含内容。(自身包含内容的网格)
- 此自定义视图在本机代码中有一个处理程序。
- 然后每个项目都有自己的处理程序版本,我可以在其中处理Map方法。
我正在使用ContentMapper(在原生iOS处理程序内部)将内容从自定义视图添加到平台视图
public static void MapContent(MyHandler handler, MyView view)
{
if (view.Content == null)
return;
handler.PlatformView.AddSubview(view.Content.ToPlatform(handler.MauiContext));
}
在CreatePlatformView()(原生iOS项目)中,我目前拥有。
UIView uIView = new UIView();
uIView.BackgroundColor = UIColor.Yellow;
return uIView;
但是我看不到我的任何内容,但是我可以看到黄色的背景占据了整个页面。
我试过在CreatePlatformView()VirtualView.ToPlatform(VirtualView.Handler.MauiContext)
中这样做,但一是它不起作用,二是我认为它无论如何都不应该起作用。
我可能做错了,我不确定。如果需要,我可以创建一个演示项目并将其上传到GitHub。
1条答案
按热度按时间yfjy0ee71#
所以我在同一个问题上挣扎,这篇文章没有完全解释如何解决这个问题。
在我的例子中,我希望在iOS上有一个
Grid
,它可以随着键盘弹出或消失而调整大小(对于Android,这个问题可以更容易地解决)。但实际上,只使用ContentView
作为基类似乎更容易。因此,我添加了一个类KeyboardAdjustingView
:P.S.:使用基于
ContentView
的类更容易的原因是ContentView
有一个ContentViewHandler
,但对于Grid
,似乎不存在GridHandler
。我还添加了一个部分处理程序类实现
KeyboardAdjustingViewHandler
:请注意,此类继承自
ContentViewHandler
,因为KeyboardAdjustingView
类基于ContentView
。现在,对于iOS实现,我们在文件
KeyboardAdjustingViewHandler.iOS.cs
中添加部分KeyboardAdjustingViewHandler
类实现为确保
KeyboardAdjustingViewHandler.iOS.cs
仅在iOS平台上编译,我们使用以下指令更新项目文件(*.csproj
):以上内容确保了以
iOS.cs
结尾的文件仅针对iOS目标进行编译,但也包括针对Android、Mac Catalyst和iOS / Mac Catalyst组合的指令。有关详细信息,请参见Configure multi-targeting
为了使用本机实现,我们在
MauiProgram.cs
中启动时注册视图和处理程序最后,为了使用视图,我们可以将一个示例赋给
ContentPage
的Content
属性,如下所示: