提问人:ablyth 提问时间:11/16/2022 最后编辑:ablyth 更新时间:11/16/2022 访问量:48
将 UIViewController 呈现为 Popover 有很多问题,我做错了吗?
Presenting UIViewController as Popover has numerous issues, am I doing it wrong?
问:
我正在使用 C# Xamarin.iOS 并开发 iOS 应用程序(仅适用于 iPad)。我目前只有大约 6 个月的 C#/Xamarin 经验,所以提前道歉。 我注意到UIPopoverPresentationController类的默认实现中嵌入了各种问题。在这一点上,我无法判断我是否只是在实现它们,令人难以置信地错误,或者弹出窗口是否存在根本缺陷。
我发现很难走得太远来实现我所认为的 Popovers 的基本功能。
- 弹出框内容大小和位置:
我试过什么: 使用 UIModalPresentationStyle.Popover 实现 UIViewController。
我所期望的: 指定的 PreferredContentSize,用于反映弹出框 UI 中内容的大小。
实际发生了什么: UIView 内容的高度/宽度沿弹出框箭头方向的轴增加 13,以考虑箭头的额外大小 - PreferredContentSize 充当添加额外内容的基线,结果是视图未按预期定位,也未考虑默认应用的箭头的任何实际偏移量。
我发现有一些方法可以解决此问题,例如将 UIViewController 子类化以在 ViewWillAppear 方法中实现逻辑,以手动将 View 内容的大小重新设置为所需的大小,并同时重置和创建新约束以考虑箭头所需的偏移量。然而,这肯定不是预期的方式吗?
- 弹出框调整大小:
我试过什么: 我在 C# Xamarin.iOS 中实现了此处描述的测试用例:(https://github.com/noahsark769/NGPopoverForceResizeTest/blob/master/NGPopoverForceResizeTest/ViewController.swift)
我所期望的: 弹出框应调整大小并动画化大小之间的过渡。
实际发生了什么: 弹出框确实会调整大小,但动画并不完整 - 大小增加是动画的,但大小减小不是。
非常令人沮丧的是,大小的增加是动画的,但大小的减小却不是。 在链接之后,有几个 gif 显示了大小增加和减少的动画,但如果没有视觉伪影,我无法重新创建它(见附图)。图像显示高度降低时的透明度视觉伪影
透明度是阴影图像的结果(无论如何,它是什么原因吗?)确实对大小的变化进行了动画处理,而视图本身不会进行动画处理,而只是捕捉到新的大小时。
我尝试将弹出框阴影图像替换为具有填充(非透明)中心的相同图像,并使用 UIImage.CreateResizableImage(insets, mode) 方法创建一个新的可调整大小的图像,不幸的是,我尝试的所有插入组合似乎只会影响阴影(与附加图像中的视觉伪影不同,它代表阴影图像的中心部分,它反映了弹出框背景/大小调整)。
我尝试简单地隐藏/删除阴影图像/图层,并在其他视图之一上使用 Layer.Shadow 选项,这些视图共同创建弹出框以创建相同的阴影,但这会删除高度之间的平滑动画(这可能仅由阴影图像创建调整大小)。
答: 暂无答案
评论