问题
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