2012-06-23 2 views
0

У меня возникло несколько проблем с вышеупомянутой проблемой. У меня есть метка в виде таблицы (X-300, Y-26, ширина-192 и высота-42), которая будет содержать случайные и неизвестные строки различной длины. Максимальное количество строк должно быть 2. Текст должен всегда находиться в верхней части метки.текст с вертикальным выравниванием в метке с заданным количеством строк

У меня есть рабочий раствор (ниже), но это только кажется так грязно - должна быть чище способ сделать то, что кажется так просто:

UILabel *cellLabel = (UILabel *)[cell viewWithTag:2]; 

// First set cell lines back to 0 and reset height and width of the label - otherwise it works until you scroll down as cells are reused. 
cellLabel.numberOfLines = 0; 
cellLabel.frame = CGRectMake(cellLabel.frame.origin.x, cellLabel.frame.origin.y, 192, 42); 

// Set the text and call size to fit 
[cellLabel setText:[[products objectAtIndex:indexPath.row] objectForKey:@"title"]]; 
[cellLabel sizeToFit]; 

// Set label back to 2 lines. 
cellLabel.numberOfLines = 2; 

// This 'if' solves a weird the problem when the text is so long the label ends "..." - and the label is slightly higher. 
if (cellLabel.frame.size.height > 42) { 
    cellLabel.frame = CGRectMake(cellLabel.frame.origin.x, cellLabel.frame.origin.y, 192, 42); 
} 
+0

Это не имеет ничего общего с xcode и, скорее, о UILabel, поэтому я удаляю тег Xcode и добавляю тег UILabel. –

ответ

1

Вот что я использую, категорию на UILabel. Я устанавливаю максимальную высоту метки + усечение хвоста. Это модифицированная версия метода sizeToFitFixedWidth: метод, который я нашел в другом сообщении SO. Возможно, вы можете использовать что-то вроде этого, чтобы разместить максимальное количество строк?

@implementation UILabel (customSizeToFit) 

- (void)sizeToFitFixedWidth:(CGFloat)fixedWidth andMaxHeight:(CGFloat)maxHeight; 
{ 
    self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, fixedWidth, 0); 
    self.lineBreakMode = UILineBreakModeWordWrap; 
    self.numberOfLines = 0; 
    [self sizeToFit]; 

    if (maxHeight != 0.0f && self.frame.size.height > maxHeight) { 
     self.lineBreakMode = UILineBreakModeTailTruncation; 
     self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, fixedWidth, maxHeight); 
    }  
} 

@end 
Смежные вопросы