Xamarin.iOS如何不依赖第三方Nuget实现Button指定位置圆角效果
Xamarin.iOS 实现按钮指定位置圆角原生方案
你可以直接使用iOS原生的UIBezierPath+CAShapeLayer能力实现对应效果,完全不需要第三方Nuget包,最终效果和你Android端的实现完全匹配。
效果示例:
完整实现代码
直接补充你的自定义渲染器逻辑即可:
public class iOSCustomButtonRenderer : ButtonRenderer { protected override void OnElementChanged(ElementChangedEventArgs<Button> e) { base.OnElementChanged(e); if (Control != null && Element != null) { // 设置按钮背景色,和Android端颜色保持一致,也可以直接取Element.BackgroundColor转换 Control.BackgroundColor = UIColor.FromHex(AppConstants.Constants.CUSTOM_BACK_BUTTON_COLOR_NEW); UpdateButtonCorner(); } } // 若按钮大小会动态变化(自适应布局、横竖屏切换场景),重写该方法实时更新圆角 public override void LayoutSubviews() { base.LayoutSubviews(); UpdateButtonCorner(); } private void UpdateButtonCorner() { if (Control == null) return; // 定义需要设置圆角的角:此处为右上角、右下角,和你的Android逻辑对应 var roundedCorners = UIRectCorner.TopRight | UIRectCorner.BottomRight; // 圆角半径,和Android端的46f保持一致 var cornerRadius = new CoreGraphics.CGSize(46, 46); // 创建圆角路径 UIBezierPath maskPath = UIBezierPath.FromRoundedRect(Control.Bounds, roundedCorners, cornerRadius); // 创建遮罩层 CAShapeLayer maskLayer = new CAShapeLayer(); maskLayer.Frame = Control.Bounds; maskLayer.Path = maskPath.CGPath; // 给按钮添加圆角遮罩 Control.Layer.Mask = maskLayer; } }
自定义规则说明
- 你可以自由组合
UIRectCorner枚举值修改需要圆角的位置,和Android的radius数组逻辑完全对应:UIRectCorner.TopLeft对应左上圆角UIRectCorner.TopRight对应右上圆角UIRectCorner.BottomLeft对应左下圆角UIRectCorner.BottomRight对应右下圆角
- 直接修改
cornerRadius的数值即可调整圆角大小,和Android端的数值可以直接通用。
内容的提问来源于stack exchange,提问作者Razvan Emil
相关产品推荐
相关产品推荐

