回到iOS上的主视图时,为什么ScrollView会上下跳动?

时间:2017-11-13 20:28:14

标签: nativescript angular2-nativescript

我正在使用带有Angular的NativeScript处理应用程序,并且遇到了ScrollView元素的问题。简而言之,问题是我有一个项目列表的初始视图,如果我按下其中一个项目进入详细视图并返回到初始视图,滚动将跳转并在顶部创建一个间隙然后跳起来,差距就消失了。

以下是该问题的GIF:

Recording of ScrollView issue

正如您所看到的,当您返回初始视图时,会产生一个间隙,但我无法弄清楚为什么会发生这种情况。 ActionBar以编程方式被禁用,我尝试完全删除它或让它可见,但它并没有什么区别。

我使用的代码与可以使用以下命令安装的Angular和TypeScript模板没有什么不同:tns create MyApp --ng或者也可以是found on GitHub

我所做的就是禁用ActionBar并将items.component.html更改为:

<GridLayout>
  <ScrollView>
    <StackLayout>
      <StackLayout *ngFor="let item of items" [nsRouterLink]="['/item', item.id]">
        <AbsoluteLayout style.backgroundColor="gray">
          <FlexboxLayout left="15" top="110" flexDirection="column">
            <Label [text]="item.id"></Label>
            <Label [text]="item.name"></Label>
          </FlexboxLayout>
        </AbsoluteLayout>
      </StackLayout>
    </StackLayout>
  </ScrollView>
</GridLayout>

我已经删除了所有不必要的样式,以便找出问题所在并且看起来罪魁祸首是AbsoluteLayout元素。删除它会使问题消失,但我一直无法弄清楚它为什么会导致问题。我完全了解ListView元素的存在,但想使用完全自定义列表进行更多自定义。

至于我的编程环境,我运行的是NativeScript版本3.3.0,其中tns-core-modulestns-ios也在3.3.0上运行。一切都在iOS 11的实际iPhone上进行了测试。

所以我的问题是:为什么会出现这个问题以及如何解决?

1 个答案:

答案 0 :(得分:1)

我注意到ScrollView上方的空格与iOS状态栏一样高,这让我相信这是iOS特定的问题。此外,我在GitHub上找到了半透明状态栏的功能请求。建议的解决方案是将以下内容添加到页面的控制器中:

this._page.style.marginTop = -20;

这解决了我的ScrollView问题,同样的问题也可以通过添加高度为20的StackLayout作为视图中的第一个元素来解决,但这会破坏大多数用户界面。 / p>