当前位置: 首页 > 知识库问答 >
问题:

当我把TaBar小部件放在SafeArea小部件中时,如何自定义Tab小部件的位置

华俊弼
2023-03-14

我已经将问题从选项卡居中改为自定义选项卡的位置。
因为我注意到选项卡实际上是居中的,根据文档,它只是添加了页签。
但是如果您希望在避开安全区域时设置一个制表符,或者选项卡中的元素不是(自动)居中对齐,我现在找不到方法。

我还尝试将选项卡包装在容器小部件中,并获得height属性集,但似乎所有的高度都避开了安全区域(通过添加一个常量)。我尝试用SafeArea小部件包装整个scaffold,但是安全区域变成了黑色,我们实际上希望tab bat变得更高,然后在这个更高的容器中布局元素,而不仅仅是移动容器。

因此,问题可能是如何自定义选项卡小部件的位置。因为Tabbar实际上是居中的,但它通过避开安全区域来布局子元素,所以它在视觉上不是垂直对齐的。

我的代码是:

@override
Widget build(BuildContext context) {
  final icons = [Icons.library_books, Icons.photo, Icons.toc];
  return Scaffold(
      bottomNavigationBar: Material(
        color: Theme.of(context).primaryColor,
        child: SafeArea(child: TabBar(
          controller: _tabController,
          tabs: _titles.map((t) {
            final i = _titles.indexOf(t);
            return Tab(
              text: t,
              icon: Icon(icons[i]),
            );
          }).toList(),
        ),),
      ),
      body: TabBarView(
        controller: _tabController,
        children: <Widget>[
          PostListPage(
            userid: widget.userid,
            username: widget.username,
          ),
          AlbumListPage(
            userid: widget.userid,
            username: widget.username,
          ),
          TodoListPage(
            userid: widget.userid,
            username: widget.username,
          ),
        ],
      )
      );
    }
}

共有1个答案

弓玉书
2023-03-14

好吧,我想我现在明白你想要什么了,恐怕这是不可能实现的。

如果不使用SafeArea小部件,则条形图的底部为正常高度,并且所有内容都居中。它的缺点是在iPhone X的黑色区域上方。

但是如果你想避免黑条区域,你必须使用安全区域(就像你做的那样),它增加了一些填充,并将所有东西向上推一点,从而避免底部的“不安全”区域。

child: Container(
  color: Colors.black,
  child: SafeArea(child: TabBar(
          controller: _tabController,
...
 类似资料:
  • 介绍 (Introduction) UiBinder是一个旨在分离功能和用户界面视图的框架。 UiBinder框架允许开发人员将gwt应用程序构建为HTML页面,并在其中配置GWT小部件。 UiBinder框架使与UI设计人员的协作变得更容易,他们比XML源代码更熟悉XML,HTML和CSS UIBinder提供了一种定义用户界面的声明方式。 UIBinder从UI中分离出程序逻辑。 UIBind

  • GWT提供了三种创建自定义用户界面元素的方法。 有三种一般策略可供遵循 - Create a widget by extending Composite Class - 这是创建自定义小部件的最常用和最简单的方法。 在这里,您可以使用现有小部件来创建具有自定义属性的复合视图。 Create a widget using GWT DOM API in JAVA - 以这种方式创建GWT基本窗口小部件

  • 问题内容: 我需要使用才能使用keyboard_actions,以便可以在iOS的键盘上方放置一个“完成”按钮(此刻使用数字键盘) 在将有一列作为一个孩子,然后一个按钮被放置在底部。我尝试过使用来将高度提高到。 我尝试将with与该属性一起使用,但是最终当键盘出现时,该小部件不会消失。 旁注:脚手架同时具有和设置为(默认值) 问题答案: 问题在于它是孩子。因此,要在两者之间使用自动尺寸小部件- 我

  • 问题内容: 我想在小部件类绑定之后绑定自事件,以便在调用绑定函数时更改小部件的文本。例如,在文本窗口小部件中的内容更改之前,将调用我的绑定。 问题答案: 在您的情况下,发生的事情是您的打印值绑定发生在类绑定之前,而类绑定实际上是在接受用户输入并将其放入小部件中的。有几种方法可以解决此问题。您可以绑定而不是,或者可以使用内置的条目验证功能在每次按键时调用您的代码。使用该解决方案,您将获得所有需要的数

  • 小部件是在视图中使用的可重用单元, 使用面向对象方式创建复杂和可配置用户界面单元。 例如,日期选择器小部件可生成一个精致的允许用户选择日期的日期选择器, 你只需要在视图中插入如下代码: <?php use yii\jui\DatePicker; ?> <?= DatePicker::widget(['name' => 'date']) ?> Yii提供许多优秀的小部件,比如 active for

  • 问题内容: 我正在尝试制作一个Python程序,您可以在其中移动小部件。 这是我的代码: 但是,这会出现小故障,并且小部件来回跳转。 谢谢! 问题答案: 您观察到的行为是由于事件的坐标相对于拖动的小部件而引起的。用 相对 坐标更新小部件的位置(在 绝对 坐标中)显然会导致混乱。 __ 为了解决这个问题,我使用了和函数(允许将相对坐标转换为绝对坐标),并使用事件来确定拖动开始时光标在小部件上的位置。