UIView Ограничения TextView contentSize Ошибка - PullRequest
0 голосов
/ 28 мая 2019

У меня есть функция, которая возвращает UIView.Я хочу динамически изменять размер моего UIView (fullView) в зависимости от объема текста, отображаемого в UITextView (thirdTextView).

Я пытался установить высоту, зависящую от sizeThatFits из thirdTextView, но он выдает «30» каждый раз?Что я делаю не так?

let fullView = UIView()

    fullView.backgroundColor = UIColor(red:0.82, green:0.83, blue:0.85, alpha:1.0)

    let firstButton = UIButton()
    firstButton.translatesAutoresizingMaskIntoConstraints = false
    let secondButton = UIButton()
    secondButton.translatesAutoresizingMaskIntoConstraints = false

    let thirdTextView = UITextView()
    thirdTextView.translatesAutoresizingMaskIntoConstraints = true
    thirdTextView.text = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book."
    thirdTextView.backgroundColor = .clear
    thirdTextView.isScrollEnabled = false

    firstButton.setTitle("Button1", for: .normal)
    firstButton.setTitleColor(.black, for: .normal)
    firstButton.titleLabel?.font = UIFont.systemFont(ofSize: 15, weight: UIFont.Weight.medium)
    firstButton.contentHorizontalAlignment = .left

    secondButton.setTitle("Button2", for: .normal)
    secondButton.setTitleColor(.black, for: .normal)
    secondButton.titleLabel?.font = UIFont.systemFont(ofSize: 15, weight: UIFont.Weight.medium)
    secondButton.contentHorizontalAlignment = .right

    let descriptionBarStackView =  UIStackView(arrangedSubviews: [firstButton, UIView() ,secondButton])
    descriptionBarStackView.translatesAutoresizingMaskIntoConstraints = false
    descriptionBarStackView.axis = .horizontal
    descriptionBarStackView.alignment = .fill

    let viewWithStackViews = UIStackView(arrangedSubviews: [descriptionBarStackView, thirdTextView])
    viewWithStackViews.translatesAutoresizingMaskIntoConstraints = false
    viewWithStackViews.axis = .vertical
    viewWithStackViews.layoutMargins = UIEdgeInsets(top: 15, left: 10, bottom: 5, right:10)
    viewWithStackViews.isLayoutMarginsRelativeArrangement = true

    fullView.addSubview(viewWithStackViews)

    NSLayoutConstraint(item: descriptionBarStackView, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 30).isActive = true

    NSLayoutConstraint.activate([
        viewWithStackViews.topAnchor.constraint(equalTo: fullView.topAnchor, constant: 0),
        viewWithStackViews.leadingAnchor.constraint(equalTo: fullView.leadingAnchor, constant: 0),
        viewWithStackViews.trailingAnchor.constraint(equalTo: fullView.trailingAnchor, constant: 0),
        viewWithStackViews.bottomAnchor.constraint(equalTo: fullView.bottomAnchor, constant: 0),
        ])


    let test = thirdTextView.sizeThatFits(thirdTextView.frame.size).height
    print(test)

    fullView.frame = CGRect(x: 0, y: 0, width: textView.frame.width - 10, height: test)

    fullView.layer.cornerRadius = 5

    return fullView
}

1 Ответ

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

Проблема здесь в том, что вы добавляете ограничения между fullView и view, пока это не подпредставление

 fullView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -10).isActive = true
 fullView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
 fullView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true

Может быть, вы пропустите

self.view.addSubview(fullView)

Для рендерингаЕсть много способов

1- Задать кадр

2- Задать ширину / высоту вида

3- Добавить его как подпредставление, но скрытое

Лучший вариант - первый

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...