根据动态文本设置UITextView的宽度和高度

时间:2016-10-20 01:03:43

标签: ios swift uilabel uitextview swift3

我正在构建一个聊天应用程序,其中每条消息都插入到表格内的一行中。每行包含一个头像和一条消息。我想根据放入文本的长度设置UITextArea的宽度和高度。

以下是我使用过的代码。但在这里,高度和宽度都是恒定的(200x50)

PS:我是Swift和ios的新手,我使用的是Swift 3.搜索后得到的每个代码都是Objective-c或swift 2

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell  = Bundle.main.loadNibNamed("ChatBox1", owner: self, options: nil)?.first as! ChatBox1


        let myTextField: UITextView = UITextView(frame: CGRect(x: 30, y: 20, width: 200.00, height: 50.00));
        cell.addSubview(myTextField)
        myTextField.isScrollEnabled = false
        myTextField.isUserInteractionEnabled = false
        myTextField.backgroundColor = UIColor.lightGray
        myTextField.text = "Lorem Ipsum is simply dummy text of the printing and typesetting industry."
        myTextField.layer.cornerRadius = 5
        print(myTextField.intrinsicContentSize)


        let image = UIImage(named: "agent")
        let imageView = UIImageView(image: image)
        imageView.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
        cell.addSubview(imageView)


        return cell
    }

enter image description here

4 个答案:

答案 0 :(得分:2)

这两种方法用于根据聊天文本设置textview的高度和宽度。

您可以使用这些。 (swift 2.3)

var screenrect = UIScreen.mainScreen().bounds

func GET_WIDTH(textView : UITextView , text : String)-> CGFloat
    {
        textView.text = text;
        let size = textView.bounds.size
        let newSizeWidth = textView.sizeThatFits(CGSize(width: CGFloat.max, height: size.height))
        // Resize the cell only when cell's size is changed
        if size.width != newSizeWidth.width
        {
            if( newSizeWidth.width > screenrect.width-120 )
            {
                textView.layer.frame.size.width = screenrect.width-120;

            }
            else if ( newSizeWidth.width < 40 )
            {
                textView.layer.frame.size.width = 40
            }
            else
            {
                textView.layer.frame.size.width = newSizeWidth.width;
            }
        }
        return textView.layer.frame.size.width + 40;
    }

    func GET_HEIGHT(textView : UITextView , text : String)-> CGFloat
    {
        textView.text = text;
        let size2 = textView.bounds.size
        let newSize = textView.sizeThatFits(CGSize(width: size2.width, height: CGFloat.max))
        if size2.height != newSize.height
        {
            if( newSize.height < 40 )
            {
                textView.layer.frame.size.height = 40
            }
            else
            {
                textView.layer.frame.size.height = newSize.height
            }
        }
        return textView.layer.frame.size.height + 15;
    }

您必须像这样调用textview的函数来设置高度和宽度。

 let textViewRight=UITextView(frame: CGRectMake(0, 4, 40, 40));
 textViewRight.layer.frame.size.width = GET_WIDTH(textViewRight, text: currentObject.chat_userMessage)
 textViewRight.layer.frame.size.height = GET_HEIGHT(textViewRight, text: currentObject.chat_userMessage)

答案 1 :(得分:1)

试试这段代码:

答案1:

   func tableView(tableView:UITableView!, numberOfRowsInSection section: Int) -> Int { 

        yourTableViewName.estimatedRowHeight = 44.0 // Standard tableViewCell size
        yourTableViewName.rowHeight = UITableViewAutomaticDimension

   return yourArrayName.count } 


   And also put this code inside your Cell for incase...
   yourCell.sizeToFit() 

答案2:

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
 }

    override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
 }

答案 2 :(得分:0)

在viewDidLoad中添加此

tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension

只需添加这两行,您的问题就会解决

答案 3 :(得分:0)

采用textView高度约束并将其设置为等于textView的内容大小。

或者,如果您使用autolayout,则可以将内容拥抱和压缩属性设置为1000.它应该根据内容扩展您的单元格。