iOS上的表单框架不一样

时间:2015-12-14 03:13:43

标签: xamarin.forms

我正在使用Xamarin Forms创建带有框架的Android版本,没有任何自定义框架渲染器,这很好。但是当我在iOS上使用它时,所有的帧都被遮蔽并相互分离,这很奇怪。我应该为iOS制作自定义渲染器,还是应该没有任何修改?

2 个答案:

答案 0 :(得分:3)

是的,Frame和iOS的默认参数不同。

iOS:OutlineColor =黑色,Android:OutlineColor =透明

iOS:HasShadow = true,Android:HasShadow = false

如果你想让它们相同,你应该从Frame派生一个类,并指定不同的属性是相同的,而你使用这个类。

public class NeatFrame : Frame
{
    public NeatFrame ()
    {
        this.OutlineColor = Color.Transparent;
        this.HasShadow = false;

        this.HorizontalOptions = LayoutOptions.Fill;
        this.VerticalOptions = LayoutOptions.Fill;
        this.BackgroundColor = Color.Transparent;       
    }
}

答案 1 :(得分:0)

对于Android,属性HasShadow(True)在Frame中按预期工作,但对于iOS,我在iOS项目中添加了以下渲染器:

[assembly: ExportRenderer(typeof(Frame), typeof(MaterialFrameRenderer))]
namespace YOU_IOS_NAMESPACE
{
    public class MaterialFrameRenderer : FrameRenderer
    {
        public override void Draw(CGRect rect)
        {
            base.Draw(rect);

            Layer.ShadowRadius = 2.0f;
            Layer.ShadowColor = UIColor.Gray.CGColor;
            Layer.ShadowOffset = new CGSize(2, 2);
            Layer.ShadowOpacity = 0.80f;
            Layer.ShadowPath = UIBezierPath.FromRect(Layer.Bounds).CGPath;
            Layer.MasksToBounds = false;
        }
    }
}

请在框架中添加一些保证金(保证金=&#34; 0,5,0,5和#34;),否则如果另一个视图太近,您将无法看到阴影。< / p>

更多细节:

https://alexdunn.org/2017/05/01/xamarin-tips-making-your-ios-frame-shadows-more-material/