nativescript vue:每页使用多个布局选项?

Posted

技术标签:

【中文标题】nativescript vue:每页使用多个布局选项?【英文标题】:nativescript vue: using more than one layout option per page? 【发布时间】:2019-02-07 23:34:58 【问题描述】:

我正在使用 Nativescript-vue 构建我的第一个 Nativescript 应用程序,但我在页面布局方面遇到了问题。

文档向您展示了如何布局页面,但总体使用情况不太清楚,我看不出您是否可以在每个页面上使用多个布局样式

我想开始在页面顶部使用 stacklayout,然后在表格中显示一些数据,所以我在下部使用网格布局。

我发现当我使用多个布局时,它只显示页面上的最后一个布局

示例:(页面上只显示GridLayout部分,stacklayout不可见)

<template>
  <Page class="page">
<ActionBar class="action-bar" :title="title"/>
<ScrollView>
  <StackLayout>
          <Image :src="img" stretch="aspectFit" v-if="img" />
          <Button class="btn btn-primary" text="Buy Now" @tap="visitPage(url)" v-if="url" />
  </StackLayout>

  <GridLayout columns="auto, auto" rows="2*, 3*">
    <Label text="Author:" row="0" col="0" padding="20px" />
    <Label text="Shakespear" row="0" col="1" padding="20px" />
    <Label text="Publisher" row="1" col="0" padding="20px" />
    <Label text="A publisher" row="1" col="1" padding="20px" />
  </GridLayout>

</ScrollView>
  </Page>
</template>

问:有没有办法在每页显示多个布局选项?

【问题讨论】:

【参考方案1】:

虽然@Argonitas 的回答是正确的,但您应该避免嵌套布局容器。在这种情况下,将两行添加到 GridLayout 会更好。比如:

<GridLayout columns="auto, auto" rows="auto, auto, 2*, 3*">
  <Image row="0" col="0"  colSpan="2" :src="img" stretch="aspectFit" v-if="img" />
  <Button row="1" col="0"  colSpan="2" class="btn btn-primary" text="Buy Now" @tap="visitPage(url)" v-if="url" />

  <Label text="Author:" row="2" col="0" padding="20px" />
  <Label text="Shakespear" row="2" col="1" padding="20px" />
  <Label text="Publisher" row="3" col="0" padding="20px" />
  <Label text="A publisher" row="3" col="1" padding="20px" />
</GridLayout>

【讨论】:

【参考方案2】:

ScrollView 只接受一个孩子。但是您可以将 GridLayout 打包到 StackLayout 中:

<ScrollView>
  <StackLayout>
          <Image :src="img" stretch="aspectFit" v-if="img" />
          <Button class="btn btn-primary" text="Buy Now" @tap="visitPage(url)" v-if="url" />

    <GridLayout columns="auto, auto" rows="2*, 3*">
      <Label text="Author:" row="0" col="0" padding="20px" />
      <Label text="Shakespear" row="0" col="1" padding="20px" />
      <Label text="Publisher" row="1" col="0" padding="20px" />
      <Label text="A publisher" row="1" col="1" padding="20px" />
    </GridLayout>
  </StackLayout>

这样,GridLayout 应该出现在 Button 下方。您通常会做的是将图像和按钮打包到一个 GridLayout 中,以将它们作为一个组来控制。

【讨论】:

以上是关于nativescript vue:每页使用多个布局选项?的主要内容,如果未能解决你的问题,请参考以下文章

使用带有布局页面或每页多个组件的 React-Router

Nativescript Vue 导航问题

在 nativescript-vue 的 FlexboxLayout 中将标签居中

如何在 Nativescript-Vue 中使用 nativescript-drawingpad?

如何导航回 Nativescript-vue 中的特定组件或 backstack 条目?

如何在 nativescript 中设置最大高度?