2012-06-27 2 views
5

Я хочу, чтобы мой текст был выровнен справа.UILabel выравнивание текста справа

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"lisn"]; 
cell=[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"lisn"] autorelease]; 
CGSize textSize = { 210.0, 10000.0 }; 
CGSize size = [[gMessageArray objectAtIndex:indexPath.row] sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap]; 

UILabel *lisnerMessage=[[[UILabel alloc] init] autorelease]; 
lisnerMessage.backgroundColor = [UIColor clearColor]; 
[lisnerMessage setFrame:CGRectMake(75 ,20,size.width + 5,size.height+2)]; 
lisnerMessage.numberOfLines=0; 
lisnerMessage.textAlignment=UITextAlignmentRight; 
lisnerMessage.text=[gMessageArray objectAtIndex:indexPath.row]; 
[cell.contentView addSubview:lisnerMessage]; 
return cell 
} 

, но мой текст не выравнивание по правому краю Пожалуйста, помогите

+0

Это не ответ на ваш вопрос, но комментарий по логике. Вы действительно хотите добавить дополнительную метку в свою ячейку каждый раз, когда таблица обновляется? –

+0

@PhillipMills: для каждой ячейки у меня есть другой текст, а не дополнительный текст в этой ячейке –

+0

Если только код не удаляет старые ярлыки из ваших ячеек, то, что вы отправили, всегда будет добавлять еще один ярлык каждый раз, когда он вызывается для определенного пути индекса , –

ответ

9

Поскольку вы используете sizeWithFont и затем установить рамку на этот размер, текст выравнивается вправо. Попробуйте добавить цвет фона светло-серого цвета на ваш ярлык, чтобы узнать, о чем я говорю. Ваш ярлык должен быть установлен на тот же размер, что и ячейка таблицы, и разрешить поток текста внутри него. Затем он будет выравниваться вправо.

Обновление с образцом

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"lisn"]; 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"lisn"]; 

    UILabel *lisnerMessage = [[UILabel alloc] init]; 
    lisnerMessage.backgroundColor = [UIColor clearColor]; 
    [lisnerMessage setFrame:cell.frame]; 
    lisnerMessage.numberOfLines = 0; 
    lisnerMessage.textAlignment = NSTextAlignmentRight; 
    lisnerMessage.text = [gMessageArray objectAtIndex:indexPath.row]; 
    [cell.contentView addSubview:lisnerMessage]; 

    return cell 
} 
+0

: не могли бы вы продумать или поместить какой-то код относительно вашего ответа. Это будет очень полезно для меня –

+1

Да, трюк с другим цветом фона - хороший. Это поможет Алоку понять, что происходит. Использование sizeWithFont в порядке, но я бы не использовал size.with для фрейма. Используйте [lisnerMessage setFrame: CGRectMake (75, 20, textSize.width + 5, size.height + 2)]; вместо. –

+0

Я редактировал ваш код с грубым примером необходимых изменений. Я не тестировал его в Xcode, но это идея. просто перестройте свою логику. –

0

Почему вы не просто сделать метку в Interface Builder/раскадровки и выберите «выравнивать правильный» вариант? Затем подключите его как свойство с именем lisnerMessage и lisnerMessage.text=[gMessageArray objectAtIndex:indexPath.row]; Это значительно сократит количество кода, который вы пишете и определенно работаете.

1

Наконец-то я исправил свою проблему. Я делал небольшую ошибку

[lisnerMessage setFrame:CGRectMake(75 ,20,size.width + 5,size.height+2)]; 

Я просто удалить size.width и дать моей конкретной координате 200 после того, что текст по правому краю.

[lisnerMessage setFrame:CGRectMake(75 ,20,200,size.height+2)]; 

Спасибо всем за ответ

5

Выравнивание по правому краю для этикетки

yourLabel.textAlignment = NSTextAlignmentRight; 
Смежные вопросы