Add Read More/Read Less to the end of UILabel SWIFT

隐身守侯 提交于 2019-12-08 11:48:23

问题


Hi i need a UILabel with Read More and Read less But didn't find any good answer except this one But the problem is, I don't know what this answer is doing. As i have tried this, but getting errors, also IN THIS ANSWER what is "@IBOutlet weak var lblHeight: NSLayoutConstraint!"

My code

import UIKit

class ExpandedLabelViewController: UIViewController {

  @IBOutlet weak var myLabel: UILabel!
  @IBOutlet weak var lblHeight: NSLayoutConstraint!
  @IBOutlet weak var btn: UIButton!

  var isLabelAtMaxHeight = false
  override func viewDidLoad() 
  {
    super.viewDidLoad()
    myLabel.text = "bla bla blabla bla blabla bla blabla bla blabla bla blabla bla bla"

  }

  @IBAction func btnAction(_ sender: Any) 
  {
    if isLabelAtMaxHeight {
        btn.setTitle("Read more", for: .normal)
        isLabelAtMaxHeight = false
        lblHeight.constant = 70
    }
    else {
        btn.setTitle("Read less", for: .normal)
        isLabelAtMaxHeight = true
        lblHeight.constant = getLabelHeight(text: "bla bla bla vvvbla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla bla", width: view.bounds.width, font: myLabel.font)
    }
  }
  func getLabelHeight(text: String, width: CGFloat, font: UIFont) -> CGFloat {

    let lbl = UILabel(frame: .zero)
    lbl.frame.size.width = width
    lbl.font = font
    lbl.numberOfLines = 0
    lbl.text = text
    lbl.sizeToFit()
    lbl.adjustsFontSizeToFitWidth = true
    return lbl.frame.size.height

  }
}

In my code i have 2 out of "myLabel" One is UILabel and second in NSLayoutConstraint.

I'm getting this exception.

2018-05-27 12:28:53.274735+0500 testingControllers[8035:240013] -[UILabel setConstant:]: unrecognized selector sent to instance 0x7fbd0f513e60
2018-05-27 12:28:53.291991+0500 testingControllers[8035:240013] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILabel setConstant:]: unrecognized selector sent to instance 0x7fbd0f513e60'

Any one here, need help.

Thanks


回答1:


Please try this:-

class FirstViewController: UIViewController, UIGestureRecognizerDelegate {

    @IBOutlet weak var myLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        myLabel.text = "bla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla blabla bla bla"
        myLabel.numberOfLines = 2
        let tap:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.labelAction(gesture:)))
        myLabel.addGestureRecognizer(tap)
        myLabel.isUserInteractionEnabled = true
        tap.delegate = self
    }

    @objc func labelAction(gesture: UITapGestureRecognizer)
    {
        if myLabel.numberOfLines == 0 {
            myLabel.numberOfLines = 2
        } else {
            myLabel.numberOfLines = 0
        }
    }
}

If you want to handle using button then :

@IBAction func action(_ sender: Any) {
    if myLabel.numberOfLines == 0 {
        myLabel.numberOfLines = 2
    } else {
        myLabel.numberOfLines = 0
    }
}

Also, you need to set constraints for the label height like below screenshot:

If you want to show more and less text at the end of label text then add more text and less text in the label accordingly.



来源:https://stackoverflow.com/questions/50550035/add-read-more-read-less-to-the-end-of-uilabel-swift

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!