[英]Xamarin.iOS - custom UIPopoverBackgroundView
我需要使用Xamarin.iOS为iOS 6+实现自定义弹出窗口。
到目前为止,除了关闭默认阴影之外,其他所有操作都有效。 这是我的实现:
public class PopoverBackgroundView : UIPopoverBackgroundView
{
private UIImageView _arrow, _background;
public override float ArrowOffset { get; set; }
public override UIPopoverArrowDirection ArrowDirection { get; set; }
[Export ("arrowHeight")]
static new float GetArrowHeight()
{
return 39;
}
[Export ("arrowBase")]
static new float GetArrowBase()
{
return 80;
}
[Export ("contentViewInsets")]
static new UIEdgeInsets GetContentViewInsets()
{
return new UIEdgeInsets (25, 25, 25, 25);
}
[Export("wantsDefaultContentAppearance")]
static new bool WantsDefaultContentAppearance
{
get { return false; }
}
public PopoverBackgroundView(IntPtr handle) : base (handle)
{
_background = new UIImageView { Image = Theme.PopoverBackgroundImage };
_arrow = new UIImageView { Image = Theme.PopoverArrowImage };
AddSubview(_background);
AddSubview(_arrow);
}
public override void LayoutSubviews()
{
base.LayoutSubviews();
var arrowFrame = new RectangleF(Frame.Width - GetArrowBase(), -14, GetArrowBase(), GetArrowHeight());
_arrow.Frame = arrowFrame;
var backgroundFrame = Frame;
backgroundFrame.X =
backgroundFrame.Y = 0;
_background.Frame = backgroundFrame;
}
}
该类很奇怪,因为您必须“覆盖”静态Objective-C值。 在C#中执行此操作的唯一方法是声明一个static new
成员并添加Export
属性。
除了WantsDefaultContentAppearance
之外, WantsDefaultContentAppearance
所有东西都在工作,它从未被调用。 根据此处的 Apple文档,它将禁用弹出框上的默认阴影。 有人让它可以与Xamarin.iOS一起使用吗? 我认为这可能是Xamarin的错误,因为所有方法都能正常工作,而这恰好是一个属性。 此类中的方法似乎被定义为此类中的“有目的”方法,因为它们在属性上看起来更漂亮。
我认为这不是Xamarin错误,但iOS API不适用于我。
为了解决这个问题,我的设计师将阴影从图像上去除了,我们只保留了默认阴影。
老实说,我认为这还是更好的选择,因为苹果花了一些时间来画一个漂亮的影子-为什么要删除它?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.