更改可见 属性 有时会更改视图的中心位置(可能是错误?)

Change visible property sometimes change the center position of the view (possible bug?)

我在主视图 (zIndex = 2) 上方有 3 个(加载器、储物柜和调试视图)隐藏视图(touchEnabled 和可见设置为 false,zIndex 设置为 1)。

每个 'over' 视图都有这个方法:

$.debugView.show = function() {

    $.debugView.touchEnabled = $.debugView.visible = true;

    $.debugView.zIndex = 3;
};

$.debugView.hide = function() {

    $.debugView.touchEnabled = $.debugView.visible = false;

    $.debugView.zIndex = 1;
};

此屏幕隐藏了 3 'over' 个视图:

现在,我正在打开 'debug view',但是,有时 它似乎改变了位置(好像中心在左上角而不是设备的中心)。

而不是要求的结果:

如果我使用不透明度而不是可见 属性,它可以正常工作。

这可能是 SDK 错误吧?

<Alloy>
    <Window>
        <View id="content"/>
        <View id="locker"/>
        <View id="loader"/>
        <View id="debugView"/>
    </Window>
</Alloy>

所有这 4 个视图都没有宽度或高度(因此它使用 Ti.UI.FILL 作为默认值)

我也通过完全不同的实现方式注意到了这一点。我只有一个视图包含在 window.

显然,如果元素被隐藏,则左侧和顶部的计算没有正确完成。

我为解决这个问题所做的是通过计算左侧位置来硬编码 left/top 位置:

$.content.left = (Ti.Platform.displayCaps.platformWidth - 75) / 2;

在我的例子中,75 是元素的宽度,所以在你的例子中会更大。你可以对身高做同样的事情。

现在,这是 iOS 唯一的解决方案。在 Android 上,您需要在计算时考虑 DPI。

我确实认为这是一个错误,尽管这个解决方案对我来说非常有效。我建议查看 JIRA 并查看它是否是已知问题,如果不是,请通过对问题的非常具体的解释提出它,最好是将可重现的案例作为应用程序提供。经典最有帮助。如果它在经典中不可重现,则可能是 alloy 问题。