Подтвердить что ты не робот

Возможно ли вертикальное выравнивание текста внутри меток с помощью "большого" кадра

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

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

Скриншот:

enter image description here

4b9b3361

Ответ 1

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

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

Ответ 2

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

[Blue setSizeToFit]

выравнивается по вертикали вверх. Значение по умолчанию сосредоточено.

Ответ 3

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

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

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

Ответ 4

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

  • Установите метку numberOfLines свойство 0 из IB

  • Установите метку lineBreakMode как UILineBreakModeWordWrap (очень важно)

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

[yourTextLabel setText:@"myLabel\n\n\n\n\n"];

Ответ 5

В 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)];
}

Ответ 6

Я добавил в viewDidLoad

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

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

Ответ 7

Вот тот же вопрос, заданный 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 здесь.

Ответ 8

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