0

我在尝试模仿时遇到了一些麻烦Ti.UI.iPhone.SystemButton.FLEXIBLE_SPACE,想知道是否有任何建议(或我没有注意到的本机功能)。目前我有一个临时的解决方法来模拟一个工具栏,如果有一个项目,那么它将居中,如果有两个,那么第一个在左边,第二个在右边,如果超过三个,那么每个不是第一个或最后一个的项目都分配给视图中的特定插槽(插槽的宽度取决于项目的数量)。在下面的示例items中是一个对象数组Ti.UI.Button并且view是一个Ti.Ui.View对象。(systemButton在 Android 上时)是一个字符串,对应于其等效的 iOS '常量'。

// Iterate over each item
for (var i in items)
{

    // Continue if a flexible space
    if ('FLEXIBLE_SPACE' === items[i].systemButton)
    {
        continue
    }

    // If there is more than one item
    if (1 !== items.length)
    {

        // Get the key
        var key = parseInt(i, 10)

        // Set the position
        switch (true)
        {

            // First
            case (0 === key):
                items[i].left = 0
                break

            // Last
            case (items.length - 1 === key):
                items[i].right = 0
                break

            // Otherwise if there are more than 3 items
            case (3 < items.length):

                // Get the slot width
                var slot = 100 / items.length

                // If a left position
                if (key < items.length / 2)
                {
                    items[i].left = (slot * key) + '%'
                }

                // Otherwise
                else
                {
                    items[i].right = (slot * (items.length - key - 1)) + '%'
                }

                // Break
                break

        }

    }

    // Add the item to the view
    view.add(items[i])

}

这在某些情况下可以接受(不完美),但并非总是在使用灵活空间时,因为根据定义,它们不适合我分配的固定宽度插槽。

任何帮助将非常感激。

编辑:

我应该提到我正在寻找一个动态的解决方案;我知道我可以在每种情况下明确定义左右位置,但我宁愿(如果可能)能够将Ti.UI.Button对象数组传递给函数并让它返回一个Ti.Ui.View对象作为带有按钮的伪工具栏根据灵活空间的存在定位。

4

1 回答 1

0

好的,经过一番玩耍后,我想我已经想出了一个解决方案。它确实需要明确定义工具栏和每个项目的宽度,但这不是什么大问题。它的工作原理是从工具栏宽度中减去每个非灵活空间的宽度,然后将剩下的内容除以灵活空间的数量,得出每个灵活空间的宽度。然后每个项目都被迭代并添加到工具栏,除了灵活空间,这些空间用宽度等于灵活空间宽度的空视图切换。下面是实际代码:

// Create a toolbar
function createToolbar(data)
{

    // Create the toolbar
    var toolbar = Ti.UI.createView(data)

    // Set the height
    toolbar.height = 44

    // Set the layout
    toolbar.layout = 'horizontal'

    // If there are items
    if (undefined !== toolbar.items)
    {

        // The width
        var width = toolbar.width

        // The number of flexible spaces
        var spaces = 0

        // Iterate over each item
        for (var i in toolbar.items)
        {

            // If not a flexible space then subtract the item width from the total width
            if ('FLEXIBLE_SPACE' !== toolbar.items[i].systemButton)
            {
                width -= toolbar.items[i].width
            }

            // Otherwise increment the number of flexible spaces
            else
            {
                ++spaces
            }

        }

        // Iterate over each item
        for (var i in toolbar.items)
        {

            // If the item is a flexible space
            if ('FLEXIBLE_SPACE' === toolbar.items[i].systemButton)
            {

                // Create the flexible space
                var space = Ti.UI.createView(
                {
                    width: width / spaces
                }
                )

                // Add the space to the toolbar
                toolbar.add(space)

            }

            // Otherwise add the item to the toolbar
            else
            {
                toolbar.add(toolbar.items[i])
            }

        }

    }

    // Return the toolbar
    return toolbar

}
于 2013-01-17T10:33:23.443 回答