Используйте атрибутивную строку с комбинированными атрибутами, чтобы скрыть последнюю строку метки

Я добавляю метку в виде строки с атрибутами в свое приложение для iPhone. Я хочу использовать два атрибута; Ti.UI.ATTRIBUTE_BASELINE_OFFSET и Ti.UI.ATTRIBUTE_FONT.

Когда я использую эти атрибуты отдельно, они оба работают нормально. Но когда я объединяю их в одну строку с атрибутами, моя последняя строка текста исчезает и обрезается. Смотрите мой код ниже:

var attributedString = Ti.UI.createAttributedString({
    text: text,
    attributes: [
        {
            type: Ti.UI.ATTRIBUTE_BASELINE_OFFSET,
            value: attributeBaseLineOffset,
            range: [0, text.length]
        },
        {
            type: Ti.UI.ATTRIBUTE_FONT,
            value: {fontFamily: "Dosis-Bold", fontSize: "16dp"},
            range: [5,10]
        }
    ]
});

Когда я использую режим отладки на симуляторе iOS, я вижу, что высота метки настраивается на первый атрибут (базовое смещение). Однако атрибут шрифта добавляет немного дополнительного отступа в верхней части метки, которого достаточно, чтобы вытолкнуть последнюю строку текста за пределы контейнера метки, а затем он усекается.

В качестве обходного пути я попытался установить высоту метки вручную, но это не помогло.

Кто-нибудь знает, как остановить усечение и показать мой полный текст в ярлыке?


person Niek Nijland    schedule 11.02.2016    source источник
comment
Забавно, у нас была такая же проблема только вчера, и мы еще не смогли ее решить. Спасибо за размещение этого вопроса :-)   -  person Arik Segal    schedule 11.02.2016
comment
Теперь беспокоюсь, надеюсь, у кого-то есть ответ! Удалось ли вам найти обходной путь/взлом, чтобы решить эту временную проблему?   -  person Niek Nijland    schedule 11.02.2016
comment
Кстати, когда я использую Ti.UI.ATTRIBUTE_STROKE_WIDTH вместо Ti.UI.ATTRIBUTE_FONT для имитации полужирного шрифта, в верхней части метки появляется тот же отступ.   -  person Niek Nijland    schedule 11.02.2016
comment
Единственный обходной путь, который мы нашли, это отмена атрибутов :-/   -  person Arik Segal    schedule 11.02.2016


Ответы (1)


Это легко исправить. В зависимости от длины строки выбор действительно заключается в том, использовать ли Ti.UI.Label или Ti.UI.TextArea. Конечно, вы всегда можете использовать TextArea везде, если это необходимо, вместо Label.

Посмотрите следующий пример, который должен обрабатывать то, что вы ищете, используя TextArea вместо Label.

var text =  'Bacon ipsum dolor Appcelerator Titanium rocks! sit amet fatback    leberkas salami sausage tongue strip steak.';
var attributedString = Ti.UI.createAttributedString({
text: text,
attributes: [
            {
                    type: Ti.UI.ATTRIBUTE_BASELINE_OFFSET,
                    value: 25,
                    range: [0, text.length]
            },
            {
                    type: Ti.UI.ATTRIBUTE_FONT,
                    value: {fontFamily: "Dosis-Bold", fontSize: "16dp"},
                    range: [5,10]
        }
    ]
});

var label = Titanium.UI.createTextArea({
    left: 20,
    right: 20,
    height: Titanium.UI.SIZE,
        borderWidth:1,
        borderColor: "#ececec",
    attributedString: attributedString
});

$.theView.add(label);

Я не знаю вашу текстовую строку/вариант использования, поэтому не могу быть уверен, но это должно работать с вашими потребностями.

person Bert G.    schedule 11.02.2016
comment
Хороший! Не подумал об этом! Я отказался от смелых слов в качестве окончательного решения, но это стоит попробовать! Однако я не работаю над этим проектом до следующей недели или через неделю. Я попробую это и приму ваш ответ, когда он сработает! Заранее спасибо! - person Niek Nijland; 12.02.2016
comment
Это работает идеально! Единственный недостаток; стиль текста в TextArea также должен применяться через строку с атрибутами. И я не понял, как выровнять текст по центру в TextArea при использовании attributeString..:/ - person Niek Nijland; 18.02.2016