首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态UITextView错位行为

动态UITextView错位行为
EN

Stack Overflow用户
提问于 2016-07-20 01:37:04
回答 3查看 392关注 0票数 8

我正在尝试一个类似于iPhone消息的文本视图,其中textview最初有一个约束(高度为<= 100),scrollEnabled = false

这是一个指向项目的链接:https://github.com/akawther/TextView

文本视图根据左侧图像中的内容大小增加高度,直到达到100的高度,然后scrollEnabled设置为true。它可以很好地工作,直到我单击右下角的“发送”按钮,textView应该变为空,并返回到原来的高度,scrollEnabled变为false。中间的图片显示了当我点击按钮时会发生什么。当我开始输入时,textview向下移动,就像您在右边的最后一个图像中看到的那样。我想要能够点击按钮并消除显示在中间图像上的行为,我如何解决这个问题?

代码语言:javascript
复制
import UIKit

class ViewController: UIViewController, UITextViewDelegate {

@IBOutlet weak var bottomConstraint: NSLayoutConstraint!
@IBOutlet weak var messageTextView: UITextView!
@IBOutlet weak var parent: UIView!
let messageTextViewMaxHeight: CGFloat = 100


override func viewDidLoad() {
    super.viewDidLoad()

    self.messageTextView.delegate = self
}

@IBAction func Reset(sender: AnyObject) {
    messageTextView.text = ""
    messageTextView.frame.size.height = messageTextView.contentSize.height
    messageTextView.scrollEnabled = false
    self.parent.layoutIfNeeded()
}

func textViewDidChange(textView: UITextView) {
    if textView.frame.size.height >= self.messageTextViewMaxHeight {

        textView.scrollEnabled = true

    } else {
        textView.scrollEnabled = false
        textView.frame.size.height = textView.contentSize.height
    }
}

}

您可以通过在github项目中执行以下步骤来复制我的问题: 1.继续键入单词并按回车键,直到您开始看到滚动2。单击按钮,您将看到文本视图在蓝色容器中上升。这就是我想要消除的问题!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-28 09:38:38

试试下面的代码:-

代码语言:javascript
复制
@IBAction func Reset(sender: AnyObject) {
        messageTextView.scrollEnabled = false
        messageTextView.text = ""
        messageTextView.frame.size.height = messageTextView.contentSize.height
        parent.frame.size.height = 20

    self.view.layoutIfNeeded()
}

func textViewDidChange(textView: UITextView) {
    if textView.contentSize.height >= self.messageTextViewMaxHeight {

        textView.scrollEnabled = true

    } else {

        textView.frame.size.height = textView.contentSize.height
        textView.scrollEnabled = false
    }
}
票数 2
EN

Stack Overflow用户

发布于 2016-07-22 19:43:47

您的问题是,UITextView具有相互冲突的属性:

  • 放在屏幕上
  • 大小

当您需要一个可调整大小的TextView时,受约束的大小将导致问题。此外,当TextView被调整大小时,它的位置在本例中被更改。

替代方法来处理这个问题:

尝试将约束设置为相对于屏幕底部的位置。当键盘出现时,您应该将TextView向上移动。此外,在可调整大小的TextView高度上设置约束也是错误的做法,除非您计划强迫用户滚动。

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2016-07-23 09:51:39

如果使用自动布局,则应该更新为约束,而不是更新textView.frame.Try为textView heightConstraint创建IBOutlet,然后将更新后的高度设置为它。

代码语言:javascript
复制
IBOutlet weak var textViewHeightConstraint: NSLayoutConstraint!

//calculate the height and update the constant
textViewHeightConstraint.constant = textView.contentSize.height
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38470967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档