Swift - UITextView не отображает текст - PullRequest
0 голосов
/ 15 января 2020

My UITextView не отображает text, и я не знаю почему.

let linkLabel: UITextView = {
    let v = UITextView()
    v.backgroundColor = .clear
    v.text = "Link"
    v.textColor = .lightGray
    v.font = UIFont(name: "AvenirNext", size: 18)
    v.font = v.font?.withSize(18)
    v.textAlignment = .right
    v.translatesAutoresizingMaskIntoConstraints = false
    return v
}()

Это был UILabel раньше и работал отлично. Но мне нужно, чтобы это было UITextView. Однако, если я изменю его на UITextView, как в коде, текст не отображается.

Есть идеи, почему это происходит?

Ответы [ 2 ]

3 голосов
/ 15 января 2020

Ваш кадр UITextView равен CGRect.zero и в отличие от UILabel, UITextView не имеет intrinsi c кадра. Вот почему вы этого не видите.


Решение

  1. Использовать init (frame: CGRect)

UITextView(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
Установить свойство кадра позже
let v = UITextView()
v.frame = CGRect(x: 0, y: 0, width: 100, height: 30)

Важно:

LinkLabel необходимо добавить в представление через InterfaceBuilder или в код с методом view.addSubview объекта UIView

override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(linkLabel)
}

Методы отладки:

  • Отладочная иерархия представления

Нажмите кнопку Иерархия представлений отладки на панели в верхней части области отладки, чтобы просмотреть 3D-рендеринг иерархии представлений приостановленного приложения

enter image description here

0 голосов
/ 15 января 2020

Вы можете использовать sizeToFit () и isScrollEnabled в false, как показано ниже:

let linkLabel: UITextView = {
        let v = UITextView()
        v.backgroundColor = .red
        v.text = "Link"
        v.textColor = .lightGray
        v.font = UIFont(name: "AvenirNext", size: 18)
        v.font = v.font?.withSize(18)
        v.textAlignment = .right
        v.sizeToFit()
        v.isScrollEnabled = false
        v.translatesAutoresizingMaskIntoConstraints = false
        return v
    }()
// And set the frame whereever you want 
linkLabel.frame.origin = CGPoint(x: 100, y: 100)
self.view.addSubview(linkLabel)
...