Можно ли вертикально выровнять текст внутри надписей с помощью «большой» рамки - PullRequest
23 голосов
/ 02 июля 2011

В моем приложении у меня есть несколько таблиц с пользовательскими ячейками. Часть текста в ячейках разбита на 2-4 строки, поэтому высота надписи достаточно велика, чтобы вместить содержимое.

Однако на iPad экран больше, и я хочу, чтобы текст отображался в верхней левой точке метки, а не в середине, как при использовании свойства numberOfLines. Я знаю, что вы можете выровнять текст по горизонтали, но должна быть возможность выровнять текст по левому верхнему углу? Или это невозможно.

Скриншот:

enter image description here

Ответы [ 8 ]

20 голосов
/ 02 июля 2011

Его невозможно выровнять текст по UILabel по вертикали.Но вы можете динамически изменять высоту метки, используя sizeWithFont: метод NSString , и просто установите его x и y какВы хотите.

В качестве альтернативы вы можете использовать UITextField .Он поддерживает contentVerticalAlignment peoperty, поскольку он является подклассом UIControl .Вы должны установить для userInteractionEnabled значение NO , чтобы пользователь не мог набирать на нем текст.

3 голосов
/ 18 февраля 2014

В iOS 7 sizeWithFont: теперь не рекомендуется! Несколько решений, таких как создание подклассов UILabel, должны быть адаптированы.

Мое решение для текста метки сверху: В подклассе TopVerticalAlignmentLabel : UILabel переопределить drawRect: следующим образом:

- (void)drawRect:(CGRect)rect
{
    CGRect labelStringRect = [self.text boundingRectWithSize:CGSizeMake(self.frame.size.width, CGFLOAT_MAX)
                                                     options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                                                  attributes:@{ NSFontAttributeName: self.font, /* further attributes */}
                                                     context:nil];

    [super drawTextInRect:CGRectMake(0, 0, self.frame.size.width, labelStringRect.size.height)];
}
3 голосов
/ 18 октября 2013

Вы можете сделать это следующим образом

  1. Установите свойство numberOfLines вашего ярлыка 0 из IB

  2. Установите lineBreakMode вашего ярлыка как UILineBreakModeWordWrap ( очень очень важно )

теперь, что бы вы ни указали на ярлыке, просто добавьте несколько @ "\ n" к нему ..... ех .-

[yourTextLabel setText:@"myLabel\n\n\n\n\n"];
3 голосов
/ 18 сентября 2012

sizeToFit не работает в UITableCellView, потому что ячейки повторно используются во время прокрутки.

Решение состоит в том, чтобы вычислить высоту ячейки таблицы в соответствии с шрифтом и размером шрифта и настроить высоту метки для него.

Поскольку было довольно сложно найти решение в Интернете, я написал короткую заметку об этом

3 голосов
/ 17 февраля 2012

Я действительно заметил, что используя

[Blue setSizeToFit]

выровнено вертикально к вершине. По умолчанию центрируется.

2 голосов
/ 08 апреля 2013

Я добавил в viewDidLoad

self.textLabel.numberOfLines = 0;
[self.textLabel sizeToFit];

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

1 голос
/ 08 ноября 2012

Вот тот же вопрос, заданный SomeOne. Вы найдете более подходящий способ решения этой проблемы. Ребята хорошо объяснили это.

Думаю, тебе стоит взглянуть на это.

здесь, в этой теме, многие ответы предлагают установить динамический фрейм для UILabel на основе text, как показано ниже, фрагмент кода, описанного ниже.

    CGSize theStringSize = [textToBeUsed sizeWithFont:lblTitle.font  constrainedToSize:labelSize lineBreakMode:lblTitle.lineBreakMode];
    lblTitle.frame = CGRectMake(lblTitle.frame.origin.x, lblTitle.frame.origin.y, theStringSize.width, theStringSize.height);
    lblTitle.text = theText;

   // lblTitle is the Label used for showing the Text.

Вы можете получить более точную идею, вместо использования textField здесь это

0 голосов
/ 01 апреля 2014

Вы можете просто использовать UITextView и установить для параметра UserInteraction значение Нет, и все проблемы будут решены!

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