Xamarin.iOS中实现浮动操作按钮的最新可行方法
Xamarin.iOS 浮动操作按钮实现方案
方案1:原生UIKit自定义实现(优先推荐,无依赖兼容问题)
该方案完全基于Xamarin.iOS原生支持的UIKit API实现,不存在第三方库弃用问题,可适配所有当前支持的iOS版本,代码量小可控性强,完全满足毕业设计项目需求。
核心实现逻辑:
- 以
UIButton作为基础载体,设置宽高为56*56(符合通用FAB设计规范),将圆角半径设为宽的一半实现圆形外观 - 通过控件的Layer属性配置悬浮阴影效果,注意需将
Layer.MasksToBounds设为false,否则阴影会被裁剪无法显示 - 点击交互和普通UIButton完全一致,可按需添加点击缩放、弹出菜单等扩展效果
- 布局时将按钮添加到当前视图的最上层,通过AutoLayout设置距离视图右侧、底部安全区各16pt的边距即可
核心实现代码:
// 初始化浮动按钮 var floatingActionBtn = new UIButton(UIButtonType.Custom); floatingActionBtn.TranslatesAutoresizingMaskIntoConstraints = false; floatingActionBtn.BackgroundColor = UIColor.FromRGB(24, 144, 255); floatingActionBtn.SetImage(UIImage.FromBundle("icon_add"), UIControlState.Normal); floatingActionBtn.Layer.CornerRadius = 28; // 配置悬浮阴影 floatingActionBtn.Layer.ShadowColor = UIColor.Black.CGColor; floatingActionBtn.Layer.ShadowOffset = new CGSize(0, 3); floatingActionBtn.Layer.ShadowOpacity = 0.25f; floatingActionBtn.Layer.ShadowRadius = 6; // 绑定点击事件 floatingActionBtn.TouchUpInside += (sender, e) => { // 此处编写按钮点击后的业务逻辑 }; // 添加到视图并设置约束 View.AddSubview(floatingActionBtn); floatingActionBtn.WidthAnchor.ConstraintEqualTo(56).Active = true; floatingActionBtn.HeightAnchor.ConstraintEqualTo(56).Active = true; floatingActionBtn.TrailingAnchor.ConstraintEqualTo(View.SafeAreaLayoutGuide.TrailingAnchor, -16).Active = true; floatingActionBtn.BottomAnchor.ConstraintEqualTo(View.SafeAreaLayoutGuide.BottomAnchor, -16).Active = true;
方案2:使用官方维护的Material组件库
如果需要更标准的Material Design交互效果(比如点击水波纹、展开子按钮动画等),可以使用仍在持续更新的官方绑定组件,不要使用2018年及之前停更的第三方旧库:
- 直接在Nuget包管理器中搜索安装
Xamarin.Google.iOS.MaterialComponents即可,该包为谷歌Material组件的官方Xamarin.iOS绑定,目前仍在适配最新iOS版本,无弃用风险 - 库中内置的
MDCFloatingButton为标准FAB控件,预置了多种交互动画,使用方式和原生UIButton基本一致
基础使用示例:
using MaterialComponents; // 初始化标准尺寸FAB var fab = MDCFloatingButton.FromButtonSize(MDCFloatingButtonSize.Normal); fab.TranslatesAutoresizingMaskIntoConstraints = false; fab.SetImage(UIImage.FromBundle("icon_add"), UIControlState.Normal); fab.BackgroundColor = UIColor.FromRGB(24, 144, 255); // 后续绑定事件、添加约束的逻辑和方案1中的原生写法完全一致
避坑提示:不要使用搜索结果中2018年前后停止维护的第三方FAB库,这类库没有适配iOS 13之后引入的SafeArea、SceneDelegate等新特性,会出现布局错位、运行崩溃等问题,无法在当前Xamarin.iOS开发环境中正常使用。
内容的提问来源于stack exchange,提问作者ManLikeCliff
相关产品推荐
相关产品推荐

