Я хочу выровнять текст внутри моего UITextView по вертикали (так что он будет в середине). Как я могу этого добиться? Я посмотрел вверх и не смог найти ответа, который мог бы мне помочь.
Заранее спасибо.
Я хочу выровнять текст внутри моего UITextView по вертикали (так что он будет в середине). Как я могу этого добиться? Я посмотрел вверх и не смог найти ответа, который мог бы мне помочь.
Заранее спасибо.
Свяжите свое текстовое представление с вашим контроллером представления и назовите его по своему усмотрению (скажем, textView
).
В функции viewDidLayoutSubviews
поместите эту строку:
textView.centerVertically()
Затем под последней фигурной скобкой вашего класса поместите это расширение:
extension UITextView {
func centerVertically() {
let fittingSize = CGSize(width: bounds.width, height: CGFloat.greatestFiniteMagnitude)
let size = sizeThatFits(fittingSize)
let topOffset = (bounds.size.height - size.height * zoomScale) / 2
let positiveTopOffset = max(1, topOffset)
contentOffset.y = -positiveTopOffset
}
}
Чтобы использовать эту функцию в Swift 2.0
, просто измените CGFloat.greatestFiniteMagnitude
на CGFloat.max
.
textView.centerVertically()
в override func layoutSubviews()
, но это не сработало.
- person Greg; 29.09.2020
layoutSubviews
или viewDidLayoutSubviews
, вам нужно вызвать super.layoutSubviews
или super.viewDidLayoutSubviews
перед вызовом метода.
- person mike vorisis; 06.10.2020
super.layoutSubviews()
или без него. Я могу показать вам свой код, если вы можете сказать мне, как это сделать.
- person Greg; 06.10.2020
class CreateTables: UIView{ ... }
, созданного ViewController.
- person Greg; 07.10.2020
Если вы хотите сделать это с помощью раскадровки, вы можете добавить представление внутри вашего textView. Затем установите ограничения, которые вы использовали для textView, на новое представление. Наконец, добавьте следующие ограничения в текстовое представление:
используя ограничения выравнивания, добавьте ограничение по вертикали.
Приведенный выше ответ правильный, просто хочу добавить решение для тех, кто обновляет textView в режиме реального времени/при редактировании.
Используйте указанное выше расширение и также добавьте метод делегата.
func textViewDidChange(_ textView: UITextView) {
textView.centerVertically()
}
Поместите следующее расширение под последней фигурной скобкой в вашем ViewController:
// MARK: - UITextView extension
extension UITextView {
func centerVerticalText() {
self.textAlignment = .center
let fitSize = CGSize(width: bounds.width, height: CGFloat.greatestFiniteMagnitude)
let size = sizeThatFits(fitSize)
let calculate = (bounds.size.height - size.height * zoomScale) / 2
let offset = max(1, calculate)
contentOffset.y = -offset
}
}
Вызовите эту функцию после установки текста.
yourTextView.centerVerticalText()
Добавьте это в свое расширение или расширяющий класс UITextView.
public func centerVertically()
{
let iFont = font == nil ? UIFont.systemFont(ofSize: UIFont.systemFontSize) : font!
textContainerInset.top = (frame.height - iFont.lineHeight) / 2
}
Это используется для центрирования текста по горизонтали.