使用Swift 3阅读更多/收起文本

5
我想在段落末尾添加“阅读更多”。当我点击“阅读更多”文本时,它应该展开并在末尾显示“收起”。点击“收起”文本时,文字将被折叠。

enter image description here
我在谷歌中找到了许多示例工作。但是,我不是很清楚,并且大多数项目都是使用Objective-C实现的。我也在YouTube上找到了它。
我想知道用Swift 3实现此功能的非常简单的代码。
我可以不使用任何额外的库来实现吗?
请帮帮我。


你想把它实现到TableView的cell中吗? - Jitendra Modi
不要这样说,@JeckyModi。目前,我添加了一个标签。这个标签是关于电影评论的。我想显示电影的简介。我应该添加标签还是文本视图来显示简介? 在这个页面中,我没有放置任何表格。 - May Phyu
不,没关系,下面的答案是正确的。比如说,如果你的段落超过5行,那么应该有一个“阅读更多/收起”的按钮。如果你想以动态方式实现它,那么你需要找到标签的高度,并根据文本增加标签的高度。 - Jitendra Modi
@JeckyModi 兄弟,您的意思是,要获取电影评论标签的动态视图,首先我应该定义标签的高度吗?但我不知道该标签的最大高度。我想电影评论文本可能有超过3段。因此,如果我定义300px的标签高度,则如果高度超过300px,则文本将无法显示。是这样吗?怎么办?很抱歉我不知道如何解决这个问题。 :( - May Phyu
不,我的意思不是那样。当您将文本设置为标签时,您必须找到标签的高度,然后通过设置属性行数= 0将该高度分配给标签。 - Jitendra Modi
2个回答

5
  • 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)
        }
    }
    

获取文本的高度

    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
    }

感谢您的即时反馈。我会尝试测试您的代码。 - May Phyu
这是为视图中的普通标签和按钮而言的。如果要在表格/集合视图中使用它,您还必须更新单元格高度/宽度。 - Matt
兄弟 @Matt,你的意思是要获取电影评论标签的动态视图,首先我应该定义标签的高度吗?但我不知道那个标签的最大高度。我想电影评论文本可能有超过3段。所以,如果我定义300px的标签高度,如果高度超过300px,文本将无法显示。是这样吗? 怎么办?很抱歉我不知道如何准确解决这个问题。 :( - May Phyu
你把这些标签放在视图中了吗?还是放在表格/滚动视图中了? - Matt
它将使用“\n”正常工作。如果缺少3/4个单词,则执行此操作。如果标签的宽度为300,请在getLabelHeight函数中传递280。您将获得比通常多一点的高度,这应该足够了。 - Matt
显示剩余8条评论

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
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接