将 UIViewController 呈现为 Popover 有很多问题,我做错了吗?

Presenting UIViewController as Popover has numerous issues, am I doing it wrong?

提问人:ablyth 提问时间:11/16/2022 最后编辑:ablyth 更新时间:11/16/2022 访问量:48

问:

我正在使用 C# Xamarin.iOS 并开发 iOS 应用程序(仅适用于 iPad)。我目前只有大约 6 个月的 C#/Xamarin 经验,所以提前道歉。 我注意到UIPopoverPresentationController类的默认实现中嵌入了各种问题。在这一点上,我无法判断我是否只是在实现它们,令人难以置信地错误,或者弹出窗口是否存在根本缺陷。

我发现很难走得太远来实现我所认为的 Popovers 的基本功能。

  1. 弹出框内容大小和位置:

我试过什么: 使用 UIModalPresentationStyle.Popover 实现 UIViewController。

我所期望的: 指定的 PreferredContentSize,用于反映弹出框 UI 中内容的大小。

实际发生了什么: UIView 内容的高度/宽度沿弹出框箭头方向的轴增加 13,以考虑箭头的额外大小 - PreferredContentSize 充当添加额外内容的基线,结果是视图未按预期定位,也未考虑默认应用的箭头的任何实际偏移量。

我发现有一些方法可以解决此问题,例如将 UIViewController 子类化以在 ViewWillAppear 方法中实现逻辑,以手动将 View 内容的大小重新设置为所需的大小,并同时重置和创建新约束以考虑箭头所需的偏移量。然而,这肯定不是预期的方式吗?

  1. 弹出框调整大小:

我试过什么: 我在 C# Xamarin.iOS 中实现了此处描述的测试用例:(https://github.com/noahsark769/NGPopoverForceResizeTest/blob/master/NGPopoverForceResizeTest/ViewController.swift)

我所期望的: 弹出框应调整大小并动画化大小之间的过渡。

实际发生了什么: 弹出框确实会调整大小,但动画并不完整 - 大小增加是动画的,但大小减小不是。

非常令人沮丧的是,大小的增加是动画的,但大小的减小却不是。 在链接之后,有几个 gif 显示了大小增加和减少的动画,但如果没有视觉伪影,我无法重新创建它(见附图)。图像显示高度降低时的透明度视觉伪影

透明度是阴影图像的结果(无论如何,它是什么原因吗?)确实对大小的变化进行了动画处理,而视图本身不会进行动画处理,而只是捕捉到新的大小时。

我尝试将弹出框阴影图像替换为具有填充(非透明)中心的相同图像,并使用 UIImage.CreateResizableImage(insets, mode) 方法创建一个新的可调整大小的图像,不幸的是,我尝试的所有插入组合似乎只会影响阴影(与附加图像中的视觉伪影不同,它代表阴影图像的中心部分,它反映了弹出框背景/大小调整)。

我尝试简单地隐藏/删除阴影图像/图层,并在其他视图之一上使用 Layer.Shadow 选项,这些视图共同创建弹出框以创建相同的阴影,但这会删除高度之间的平滑动画(这可能仅由阴影图像创建调整大小)。

C# Xamarin.iOS UIKit UIPopOverPresentationController

评论

0赞 Jason 11/16/2022
请在发布前阅读如何提问。这只是密集的文本段落,不包含相关代码,没有说明您遇到的问题的图像,也没有您想要回答的简洁问题。
0赞 ablyth 11/16/2022
@Jason我已经解释了我对预期和实际结果的尝试。我在相关的地方包含了一张图像来展示视觉伪影。我创建的代码是 Xamarin.iOS 中链接的 github (swift) 的 1 对 1 翻译。我的问题得到了解释,我的问题是我如何创建一个弹出框,该弹出框可以根据选定的弹出框箭头方向对其大小进行动画调整并偏移包含的视图。我没有发现其他例子可以解决我遇到的这些问题。
0赞 Zack 11/18/2022
能否提供创建弹出框并调整其大小的 Xamarin.iOS 代码?关于动画转换,可以参考 Xamarin 的官方文档。

答: 暂无答案