You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter:CupertinoNavigationBar无法通过PreferredSize调高度,iOS端如何实现?

调整CupertinoNavigationBar高度的解决方案

问题原因

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:29:58