слишком длинная текстовая метка в uitableviewcell и выталкивает текстовую метку из поля зрения - PullRequest
28 голосов
/ 21 апреля 2011

Когда я использую UITableViewCellStyleValue1, я получил длинную строку textLabel, и каким-то образом detailTextLabel выдвинулся из представления.

Когда я закорочил свой текст textLabel, то я могу увидеть текст detailTextLabel.

Можно ли в любом случае ограничить ширину textLabel в вышеприведенном стиле, чтобы он урезал textLabel слишком длинным?

Мой код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];

}

cell.textLabel.lineBreakMode = UILineBreakModeTailTruncation;

//---get the letter in each section; e.g., A, B, C, etc.---
NSString *alphabet = [self.currencyNameIndex objectAtIndex:[indexPath section]];

//---get all states beginning with the letter---
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", alphabet];
self.currencyList = [self.keyCurrencyName filteredArrayUsingPredicate:predicate];

if ([self.currencyList count] > 0) 
{
    NSString *currencyName = [self.keyCurrencyName objectAtIndex:indexPath.row];
    cell.textLabel.text = currencyName;

    NSString *currencyCode = [self.valueCurrencyCode objectAtIndex:indexPath.row];
    cell.detailTextLabel.text = currencyCode;

}   

return cell;
}

поэтому название моей валюты будет длинным в какой-то записи.

Ответы [ 12 ]

0 голосов
/ 30 января 2013

Создайте пользовательский UITableViewCell с UILabel, которым вы можете управлять, как хотите, или обрежьте текст, который вы назначаете для textLabel базового класса, чтобы он соответствовал имеющемуся пространству.

Это не идеально, но я использовал технику усечения текста в местах, где пользовательская ячейка перебивает (например, когда единственная проблема заключалась в подгонке текста), используя категорию NSString с методом, подобным следующему:

- (NSString *)stringByTruncatingToWidth:(CGFloat)width withFont:(UIFont *)font
{
    NSString *result = [NSString stringWithString:self];

    while ([result sizeWithFont:font].width > width)
    {
        result = [result stringByReplacingOccurrencesOfString:@"..." withString:[NSString string]];

        result = [[result substringToIndex:([result length] - 1)] stringByAppendingString:@"..."];
    }

    return result;
}

Вероятно, не "оптимизирован", но работает для простых сценариев.

0 голосов
/ 21 апреля 2011

Используйте свойство UILabel lineBreakMode, чтобы ограничить ваш текст шириной вашего UILabel

@property(nonatomic) UILineBreakMode lineBreakMode

Используйте его, как показано ниже.

myLabel.lineBreakMode = UILineBreakModeTailTruncation;

Вот списокзначения, которые можно использовать с lineBreakMode.

http://developer.apple.com/library/ios/#documentation/uikit/reference/NSString_UIKit_Additions/Reference/Reference.html#//apple_ref/doc/c_ref/UILineBreakMode

РЕДАКТИРОВАНИЕ:

Установите ширину вашего UILabel согласно вашемутребование

напр.

myLabel.frame.size.width = 320;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...