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