Xamarin iOS 仅对按钮的某些角进行圆角处理

Xamarin iOS Round only some corners of a Button

提问人:Razvan Emil 提问时间:11/20/2021 更新时间:10/12/2022 访问量:516

问:

我需要在 Xamarin.iOS 上为按钮实现这种效果(因此,图像中只有带有圆角的蓝色按钮),基本上只是使按钮的任何角变圆,但不是一次全部变圆。我不喜欢使用另一个像“Pancake”这样的 nuget 包,我认为这是一个答案。iOS 上是否有任何特定于平台的自定义以匹配 Android 版本?

enter image description here

我设法在ANDROID上实现了这一点,如下所示:

public class DroidCustomButtonRenderer : ButtonRenderer
    {
        public DroidCustomButtonRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Forms.Button> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {                
                GradientDrawable gradientDrawable = new GradientDrawable();                         gradientDrawable.SetColor(global::Android.Graphics.Color.ParseColor(AppConstants.Constants.CUSTOM_BACK_BUTTON_COLOR_NEW));

                float[] radius = new float[8];

                radius[0] = 0;   //Top Left corner
                radius[1] = 0;   //Top Left corner
                radius[2] = 46f;     //Top Right corner
                radius[3] = 46f;     //Top Right corner
                radius[4] = 46f;     //Bottom Right corner
                radius[5] = 46f;     //Bottom Right corner
                radius[6] = 0;   //Bottom Left corner
                radius[7] = 0;   //Bottom Left corner

                gradientDrawable.SetCornerRadii(radius);
                Control.SetBackground(gradientDrawable);
            }
        }
    }

请问我怎样才能在 iOS 上实现相同的效果?

public class iOSCustomButtonRenderer : ButtonRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);

            // ?
        }
    }
Xamarin Xamarin.ios

评论

1赞 ToolmakerSteve 11/20/2021
尝试调整此 Swift 代码
0赞 Razvan Emil 11/21/2021
@ToolmakerSteve试一试
0赞 Shaw 11/22/2021
或者尝试 ,如果按钮位于页面边缘Margin="-8, 0, 0, 0"

答:

1赞 Wen xu Li 11/22/2021 #1

您可以在 iOS 类中使用 MaskedCorners 来控制图形的显示。

这是我的实现类供您参考:

[assembly: ExportRenderer(typeof(CustomButton),typeof(CurvedCornersButtonRenderer))]
namespace xxx.iOS
{
    class CurvedCornersButtonRenderer : ButtonRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);
            Control.BackgroundColor = UIColor.Blue;
            Control.ClipsToBounds = true;
            Control.Layer.CornerRadius = 15;
            Control.Layer.MaskedCorners = CoreAnimation.CACornerMask.MaxXMinYCorner | CoreAnimation.CACornerMask.MaxXMaxYCorner;
        }
   
    }
}

评论

0赞 Razvan Emil 11/23/2021
徐丽谢谢,这就是答案
0赞 Razvan Emil 11/24/2021
对于看到此内容的任何人,请确保包含“if (Control != null){}”检查
1赞 Pavlos Mavris 10/12/2022 #2

上面的答案有效,但如果有人想改变所有角落,必须包括“MaskedCorners”。CoreAnimation.CACornerMask.MinXMinYCorner|CoreAnimation.CACornerMask.MinXMaxYCorner