我需要使用iOS 6+使用Xamarin.iOS实现自定义弹出。
到目前为止,除了关闭默认阴影之外,一切都在正常工作。以下是我的实现:
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#中这样做的唯一方法是声明一个static new成员并添加Export属性。
除了从未被调用的WantsDefaultContentAppearance之外,一切都正常工作。根据苹果的文档这里,它将禁用弹出窗口上的默认阴影。有人和Xamarin.iOS合作过吗?我认为这可能是一个Xamarin错误,因为所有的方法都可以正常工作,而这个方法恰好是一个属性。该类中的方法似乎被定义为该类中的“故意”方法,因为它们作为属性看起来要漂亮得多。
发布于 2014-08-06 19:04:58
我不认为这是一个Xamarin错误,但iOS API只是不适合我。
为了解决这个问题,我的设计师把他的阴影从图像中取下来,我们只保留默认的阴影。
老实说,我觉得这样做更好,因为苹果花了时间做了一个很好的阴影--为什么要删除它呢?
https://stackoverflow.com/questions/21586947
复制相似问题