#string #appcelerator
#строка #appcelerator
Вопрос:
Я пытаюсь определить длину строки, чтобы я мог динамически размещать некоторые метки. В iOS я бы использовал:
CGSize size = [string sizeWithFont:font];
Возможно ли это сделать с помощью API Appcelerator или есть другой способ сделать этот тип динамического макета?
Ответ №1:
Если вы создаете метки с шириной ‘auto’, после того, как они были созданы, вы можете получить доступ к их фактической ширине и соответствующим образом расположить любые другие метки:
var window = Ti.UI.createWindow();
var label = Ti.UI.createLabel({
text: 'This is a test string',
width: 'auto',
color: '#FFF',
left: 0,
top: 0
});
var labelWidth = label.width;
Ti.API.info(labelWidth);
// Dynamically position the second label
var secondLabel = Ti.UI.createLabel({
text: 'Second label',
width: 100,
left: labelWidth 10,
top: 0,
color: '#FFF'
});
window.add(label);
window.add(secondLabel);
window.open();
Это не очень элегантно, но работает.
Комментарии:
1. Похоже, у меня это не работает. Это регистрируется как «auto», и вторая метка рисуется поверх первой. Я должен был упомянуть, что я пытаюсь это сделать с mobilesdk 1.7, если это имеет значение.
2. Извините, это был плохой пример, хотя принцип верный. Я обновил пример кода, попробуйте это — версия не должна иметь значения, хотя я использую 1.6.2.
3. Вероятно, это связано с тем, что вам нужно добавить метки в окна перед их размещением.
4. Тем не менее, у меня тоже есть проблемы с этим. Appcelerator может быть привередливым.
5. Ах, хорошо. Я использовал его только на iPhone, когда отвечал, приятно знать!
Ответ №2:
var win = Ti.UI.createWindow({
'layout': 'horizontal'
});
Комментарии:
1. макет: «горизонтальный» был ключевым. Спасибо, пропустил это в кухонной раковине.