Flutter:CupertinoNavigationBar无法通过PreferredSize调高度,iOS端如何实现?
问题原因
CupertinoPageScaffold的navigationBar参数要求传入ObstructingPreferredSizeWidget类型的组件,你使用的PreferredSize仅实现了PreferredSizeWidget,不满足类型要求,因此报错。
可行方案
方案一:自定义符合类型要求的导航栏组件
创建一个同时实现PreferredSizeWidget和ObstructingPreferredSizeWidget的自定义组件,包裹CupertinoNavigationBar并指定高度:
class CustomCupertinoNavBar extends StatelessWidget implements ObstructingPreferredSizeWidget { final double height; final Widget child; const CustomCupertinoNavBar({ super.key, required this.height, required this.child, }); @override Widget build(BuildContext context) { return SizedBox( height: height, child: child, ); } @override Size get preferredSize => Size.fromHeight(height); @override bool shouldFullyObstruct(BuildContext context) { // 根据需求设置:true表示导航栏完全遮挡下方内容,false则部分遮挡 return true; } }
使用示例:
CupertinoPageScaffold( navigationBar: CustomCupertinoNavBar( height: 70.0, child: CupertinoNavigationBar( middle: Text('自定义高度导航栏'), ), ), child: Center(child: Text('content')), );
方案二:通过内边距调整高度(简单场景)
如果只是需要在原有导航栏基础上小幅增加高度,可以给导航栏内容添加上下内边距:
CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( middle: Container( padding: EdgeInsets.symmetric(vertical: 15), child: Text('自定义高度'), ), ), child: Center(child: Text('content')), );
这种方式适合不需要大幅调整高度的场景,灵活性不如方案一。
内容的提问来源于stack exchange,提问作者Adam B
相关产品推荐
相关产品推荐

