Я добавил одну метку в свой файл с перьями, тогда для нее требуется выравнивание по левому верхнему краю. Поскольку я предоставляю текст во время выполнения, я не уверен, сколько там строк. Таким образом, если текст содержит только одну строку, он отображается как выровненный по вертикали. Это выравнивание не совпадает с моей этикеткой перед ним.
Например:
Что выглядит странно :(
Есть ли способ установить текст метки для выравнивания по верхнему левому краю?
Ответы:
Вместо того, чтобы заново объяснять, я дам ссылку на этот довольно обширный и высоко оцененный вопрос / ответ:
Вертикальное выравнивание текста по верхнему краю в UILabel
Короткий ответ: нет, Apple не упростила эту задачу, но это возможно, изменив размер кадра.
источник
Сделать это довольно просто. Создайте
UILabel
подкласс соverticalAlignment
свойством и переопределите,textRectForBounds:limitedToNumberOfLines
чтобы вернуть правильные границы для верхнего, среднего или нижнего вертикального выравнивания. Вот код:SOLabel.h
SOLabel.m
источник
bounds.size.width
вместоrect.size.width
in,textRectForBounds:limitedToNumberOfLines:
похоже, исправляет это.Я нашел решение, используя AutoLayout в StoryBoard.
1) Установите количество строк на 0 и выравнивание текста по левому краю.
2) Установите ограничение по высоте.
3) Ограничение высоты должно быть в соотношении - меньше или равно
4)
Я получил следующий результат:
источник
viewWillLayoutSubviews
в контроллер или файл ячейки? Если контроллер, как он получает доступ к UILabel из ячейки?У меня работает SOLabel.
Swift 3 и 5:
Эта версия была обновлена по сравнению с исходной, чтобы обеспечить поддержку языков RTL:
Swift 1:
источник
В моем случае это была
bottom space
проблема ограничения. Я установил его= 16
.Когда я установил его
bottom to >= 16
, проблема была решена.Кроме того, если у вас есть ограничение по высоте на этикетке, вам необходимо его удалить.
Вот вид ограничений моей метки в инспекторе размеров:
источник
В вашем коде
Помните, что если вы используете это в ячейках таблицы или других представлениях, которые обрабатываются с другими данными, вам нужно будет где-то сохранить исходный фрейм и сбросить его перед вызовом sizeToFit.
источник
Я нашел другое решение той же проблемы. Я использовал
UITextView
вместоUILabel
и переключилeditable()
функцию наfalse
.источник
У меня тоже была эта проблема, но я обнаружил, что порядок, в котором вы устанавливаете свойства и методы UILabel, имеет значение!
Если вы позвоните
[label sizeToFit]
раньше,label.font = [UIFont fontWithName:@"Helvetica" size:14];
текст не выровняется по верхнему краю, но если вы поменяете их местами, то это произойдет!Я также заметил, что установка текста сначала тоже имеет значение.
Надеюсь это поможет.
источник
Поскольку вы используете построитель интерфейса, установите ограничения для вашей метки (не забудьте также установить высоту и ширину). Затем в инспекторе размеров проверьте высоту метки. Там вы захотите, чтобы было написано> = вместо =. Затем в реализации для этого контроллера представления установите количество строк равным 0 (это также можно сделать в IB) и установите метку [label sizeToFit]; и по мере увеличения длины текста метка будет увеличиваться в высоту и сохранять текст в верхнем левом углу.
источник
Если вам нужен нередактируемый текст, который по умолчанию начинается в верхнем левом углу, вы можете просто использовать текстовое представление вместо метки, а затем установить его состояние как нередактируемое, например:
Это проще, чем возиться с этикетками ...
Ура!
источник
Решение с SoLabel работает, спасибо.
Ниже я добавил монотачную версию:
источник
Самый простой и легкий способ - встроить метку в StackView и установить для StackView Axis значение Horizontal, Alignment to Top в Attribute Inspector из Storyboard, как показано здесь .
источник
Основываясь на замечательном ответе totiG, я создал класс IBDesignable, который упрощает настройку вертикального выравнивания UILabel прямо из StoryBoard. Просто убедитесь, что вы установили для своего класса UILabel значение «VerticalAlignLabel» из инспектора идентичности StoryBoard. Если вертикальное выравнивание не сработает, перейдите в Editor-> Refresh All Views, что должно помочь.
Как это работает: после того, как вы правильно настроили свой класс UILabel, раскадровка должна показать вам поле ввода, которое принимает целое число (код выравнивания).
Обновление: я добавил поддержку центрированных меток ~ Sev
Введите 0 для выравнивания по верхнему краю
Введите 1 для среднего выравнивания
Введите 2 для выравнивания по нижнему краю
источник
вы также можете просто изменить свой UILabel на UITextView, потому что они в основном делают то же самое, за исключением того, что преимущество UITextView заключается в том, что текст автоматически выравнивается по левому верхнему краю
источник
У меня есть эта проблема, но моя метка была в UITableViewCell, а в фонде самый простой способ решить проблему - создать пустой UIView и установить метку внутри него с ограничениями только вверху и слева, на проклятии установите количество строк на 0
источник
Для iOS 7 это то, что я сделал и работал на меня
источник
Swift 2.0 :: Использование расширения UILabel
Сделайте постоянные значения перечисления в пустом файле Swift.
Использование расширения UILabel:
Создайте пустой класс Swift и назовите его. Добавьте следующее.
Использование :
источник
sampleLabel: UILabel?
?Swift 3 версия ответа @totiG
источник
Ответ @totiG правильный и решил мою проблему. Но я обнаружил проблему при реализации этого метода, в небольших устройствах, таких как 5s, SE, у меня это не работает. Я должен установить
label.sizeToFit()
вoverride func layoutSubViews()
источник
Swift 5
Все просто, порядок свойств решает все.
источник
Как установить выравнивание по левому верхнему краю для приложения UILabel для iOS? Ярлык Установите для режима содержимого значение "Вверху слева" работает для меня, большое спасибо:
источник