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

时间:2017-01-02 15:25:21

标签: position appcelerator opacity appcelerator-titanium visible

我在主视图(zIndex = 2)上方隐藏了3个视图(加载器,锁定器和调试视图)隐藏视图(touchEnabled和visible设置为false,zIndex为1)。

每个' over' view有这个方法:

$.debugView.show = function() {

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

    $.debugView.zIndex = 3;
};

$.debugView.hide = function() {

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

    $.debugView.zIndex = 1;
};

此屏幕有3' over'隐藏的观点:

enter image description here

现在,我打开了调试视图',但是,有时它似乎改变了位置(就好像它的中心一样)左上角而不是设备的中心。)

enter image description here

取代所需的结果:

enter image description here

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

这可能是一个SDK错误吗?

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

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

1 个答案:

答案 0 :(得分:2)

我也注意到这与完全不同的实现。我只有一个视图,我包含在一个窗口中。

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

我为解决这个问题所做的是通过使用以下方法计算左侧位置来硬编码左/上位置:

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

在我的情况下,75是元素的宽度,因此在你的情况下会更大。你也可以为身高做同样的事。

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

我认为这是一个错误,虽然这个解决方案对我来说非常合适。我建议查看JIRA并查看它是否是一个已知问题,如果没有,请提出一个非常具体的问题解释,最好是以应用程序的形式提供可重现的案例。经典会帮助大多数人。如果它在经典中不可再现,则可能是合金问题。