Как динамически установить высоту просмотра текста с помощью автоматического определения расположения - PullRequest
0 голосов
/ 20 сентября 2018

Необходимо настроить текстовое представление, которое будет иметь 30 в качестве начальной высоты enter image description here примерно так

, когда пользователь вводит текст, высота текстового просмотра должна быть увеличена до определенной высоты

enter image description here

Как мне добиться этого с помощью автоматического выделения, и вот так выглядят мои ограничения автоматического выделения * enter image description here

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Установите UITextView 's isScrollEnabled в значение false, тогда UITextView будет соответствовать его размеру автоматически.

И помните, не добавляйте ограничения для привязки высоты с постоянным значением:

textView.snp.makeConstraints{ (maker) in maker.height.greaterThanOrEqualTo(xxx) }

Надеюсь, что это полезно.

0 голосов
/ 20 сентября 2018

enter image description here

Поместите UITextView в другое представление контейнера (здесь выделите красный цвет) и установите constraints просмотра контейнера, как показано ниже:

enter image description here

UITextView в пределах containerview будет иметь ограничение leading trailing top bottom, выровненное по containerview (красный1) здесь.

, после чего вы должны взять выходную ссылку ограничения height и bottom контейнера: представление (см. изображение ниже).

enter image description here

После этого поместите фрагмент кода, показанный ниже, в метод viewDilLoad ...

enter image description here

Затем простозапишите два метода, чтобы контролировать остальные вещи.И Хола !ты чемпион!Вы сделали это.

//MARK: TextView delegate

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    if(text == "\n") {
        textView.resignFirstResponder()
        return false
    }
    return true
}


func textViewDidChange(_ textView: UITextView) {


    let fixedWidth = textView.frame.size.width
    textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
    let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
    var newFrame = textView.frame
    newFrame = CGRect.init(x: newFrame.origin.x, y: newFrame.origin.y+newFrame.height-newSize.height, width: max(newSize.width, fixedWidth), height: newSize.height)

    let newHeight = newFrame.size.height as CGFloat

    Swift.print("height: %f",newHeight)

    if newHeight > 40 && newHeight <= 105
    {
        chatBoxContainerViewHeightConstraint.constant = newHeight + 16
        UIView.animate(withDuration: 0.3) {
            self.view.layoutIfNeeded()
        }
    }
    else if newHeight <= 40
    {
        chatBoxContainerViewHeightConstraint.constant = 56
        UIView.animate(withDuration: 0.3) {
            self.view.layoutIfNeeded()
        }
    }

}


@objc func keyboardWillChangeFrame(_ notification: NSNotification) {

    if let userInfo = notification.userInfo {

        let duration:TimeInterval = (userInfo[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0
        let animationCurveRawNSN = userInfo[UIKeyboardAnimationCurveUserInfoKey] as? NSNumber
        let animationCurveRaw = animationCurveRawNSN?.uintValue ?? UIViewAnimationOptions.curveEaseInOut.rawValue
        let animationCurve:UIViewAnimationOptions = UIViewAnimationOptions(rawValue: animationCurveRaw)

        let endFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
        let endFrameY = endFrame?.origin.y ?? 0
        let tabbarHeight = self.tabBarController?.tabBar.frame.size.height
        if (endFrameY >= UIScreen.main.bounds.size.height) {
            Swift.print("----< %f",endFrameY)
            self.bottomViewBottomConstraint.constant = 0
        } else  {
            Swift.print("----> %f",endFrameY)
            self.bottomViewBottomConstraint.constant = -((endFrame?.size.height)!-tabbarHeight! )
        }
        UIView.animate(withDuration: duration,
                       delay: TimeInterval(0),
                       options: animationCurve,
                       animations: { self.view.layoutIfNeeded() },
                       completion: nil)
    }
}
0 голосов
/ 20 сентября 2018

Попробуйте

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