Вертикальное выравнивание в редактируемом UITextView - PullRequest
0 голосов
/ 27 мая 2019

Я хочу установить вертикальное выравнивание на моем UITextView.Текстовое представление доступно для редактирования, а прокрутка отключена:

let textView = UITextView(frame: frame)
textView.backgroundColor = .clear
textView.attributedText = myAttributedString
textView.isUserInteractionEnabled = true
textView.isEditable = true
textView.allowsEditingTextAttributes = true
textView.isScrollEnabled = false
textView.textContainerInset = .zero
self.addSubview(textView)

Итак, я хотел бы сделать что-то вроде:

textView.verticalAlignment = .center

Я уже пытался разделить текстовое представление на подклассы и добавить атрибут вродеthis:

class MyTextView: UITextView {
    public var verticalAlignment: UIControl.ContentVerticalAlignment = .center {
        didSet {
            let topCorrection: CGFloat
            switch verticalAlignment {
            case .center:
                topCorrection = (bounds.size.height - contentSize.height * zoomScale) / 2.0
            case .bottom:
                topCorrection = (bounds.size.height - contentSize.height * zoomScale)
            case .top, .fill:
                topCorrection = 0
            @unknown default:
                topCorrection = 0
            }
            contentInset.top = max(0, topCorrection)
        }
    }
}

Но, похоже, не работает с isScrollEnabled, установленным на false.

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Может быть, вы намеревались использовать UITextField?

let field = UITextField()
field.contentVerticalAlignment = UIControlContentVerticalAlignment.center

Или установите значение .bottom, .top и т. Д.

0 голосов
/ 27 мая 2019

Создание пользовательского textView

class CustomTextView: UITextView {
    override var canBecomeFirstResponder: Bool {
        return false
    }

    override var selectedTextRange: UITextRange? {
        get {
            return nil
        } set {

        }
    }

    override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        if let tapGestureRecognizer = gestureRecognizer as? UITapGestureRecognizer,
            tapGestureRecognizer.numberOfTapsRequired == 1 {
            return super.gestureRecognizerShouldBegin(gestureRecognizer)
        }

        if let longPressGestureRecognizer = gestureRecognizer as? UILongPressGestureRecognizer,

            longPressGestureRecognizer.minimumPressDuration < 0.325 {
            return super.gestureRecognizerShouldBegin(gestureRecognizer)
        }
        gestureRecognizer.isEnabled = false
        return false
    }
}

Использовать это текстовое представление как базовый класс для текстового представления

...