Read More/Less with Swift 3

烈酒焚心 提交于 2020-01-09 10:33:49

问题


I want to add "Read more" at the end of the paragraph. When I click on the "Read more" text, it should be expand and display "Less" at the end. The texts will be collapsed when click on "Less" text.


I find many sample work in google. But, I don't understand clearly and most projects are implemented with Objective-C. I also find it in youtube.
I would like know very sample code to implement this with Swift 3.
Can I implement without using any additional library?
Please help me.


回答1:


  • Create an outlet for height constraint of your messageLabel
  • Set top layout of your "Read more" button to messageLabel
  • On clicking "Read more" button increase height constraint constant, on clicking "Read less" decrease height constraint constant.

    @IBOutlet weak var btn: UIButton!
    
    @IBOutlet weak var lblHeight: NSLayoutConstraint!
    
    var isLabelAtMaxHeight = false
    
    @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: yourSummaryText, width: view.bounds.width, font: yourSummaryLabel.font)
        }
    }
    

Get height of a text

    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()

        return lbl.frame.size.height
    }



回答2:


I have done it with trimming the string.

we can compare the string characters length by .count and we can hide read more button if there are less only very few characters in the string.

And removed the last word after trimming to ensure that no visible words are cut off. Then added "...." at the end

        var trimData = ""

        if eventData.eventDescription.count > 500 {
            cell.readMoreLabel.isHidden = false

            if !readMore {

                if eventData.eventDescription.count > 500 {

                    trimData = String(eventData.eventDescription.prefix(500))

                    trimData = trimData.components(separatedBy: " ").dropLast().joined(separator: " ")

                    trimData = trimData+"...."
                } else {
                    trimData = eventData.eventDescription
                }

                cell.readMoreLabel.attributedText = NSAttributedString(string: "Read More", attributes:
                    [.underlineStyle: NSUnderlineStyle.styleSingle.rawValue])



            } else {
                trimData = eventData.eventDescription
                cell.readMoreLabel.attributedText = NSAttributedString(string: "Read Less", attributes:
                    [.underlineStyle: NSUnderlineStyle.styleSingle.rawValue])
            }

        } else {
            trimData = eventData.eventDescription
             cell.readMoreLabel.isHidden = true
        }


来源:https://stackoverflow.com/questions/42338768/read-more-less-with-swift-3

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