Возможно ли вертикальное выравнивание текста внутри меток с помощью "большого" кадра
В моем приложении у меня несколько табличных представлений с пользовательскими ячейками. Часть текста в ячейках распределяется между 2-4 строками, поэтому высота метки достаточно велика, чтобы содержать контент.
Однако на iPad экран больше, и я хочу, чтобы текст отображался в верхней левой части метки, а не посередине, как при использовании свойства numberOfLines
. Я знаю, что вы можете горизонтально выровнять текст, но должно быть возможно также выровнять текст в верхнем левом углу? Или это невозможно.
Скриншот:
![enter image description here]()
Ответы
Ответ 1
Невозможно выровнять текст в UILabel по вертикали. Но вы можете динамически изменять высоту метки с помощью метода sizeWithFont: NSString и просто задавать свои x и y, как вы хотите.
В качестве альтернативы вы можете использовать UITextField. Он поддерживает contentVerticalAlignment, поскольку он является подклассом UIControl. Вы должны установить для параметра userInteractionEnabled значение NO, чтобы пользователь не печатал текст на нем.
Ответ 2
Я действительно заметил, что используя
[Blue setSizeToFit]
выравнивается по вертикали вверх. Значение по умолчанию сосредоточено.
Ответ 3
sizeToFit
не работает в UITableCellView
, потому что ячейки повторяются во время прокрутки.
Решение состоит в том, чтобы вычислить высоту ячейки таблицы в соответствии с размером шрифта и шрифта и отрегулировать высоту надписи к ней.
Как было сложно найти решение в Интернете, я написал короткую статью об этом
Ответ 4
Вы можете сделать это следующим образом
теперь все, что вы установили на ярлыке, просто добавляет несколько @ "\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, и все ваши проблемы будут решены!