阅读更多/更少使用Swift 3

时间:2017-02-20 07:30:38

标签: ios swift3 uilabel uitextview expand

我想添加" 了解更多"在该段末尾。当我点击"阅读更多"文字,应该展开并显示" "在末尾。 点击" Less"文本将被折叠。文本。

enter image description here
我在谷歌找到了很多样本​​。但是,我不清楚,大多数项目都是用Objective-C实现的。我也在youtube中找到它。
我想知道用 Swift 3 实现这个的示例代码。
我可以不使用任何额外的库来实现吗?
请帮助我。

2 个答案:

答案 0 :(得分:2)

  • messageLabel
  • 创建高度限制的出口
  • 设置"阅读更多"的顶部布局按钮到messageLabel
  • 点击"了解更多"按钮增加高度约束常数,点击"少阅读"减少高度约束常数。

    @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)
        }
    }
    

获取文字的高度

    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
    }

答案 1 :(得分:0)

我已经完成了修剪字符串的工作。

我们可以通过.count比较字符串字符的长度,如果字符串中只有很少的字符,我们可以隐藏更多阅读按钮。

并在修剪后删除最后一个单词,以确保没有切掉可见的单词。然后在末尾添加“ ....”

        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
        }