阅读 More/Less 和 Swift 3
Read More/Less with Swift 3
我想在段落末尾添加“阅读更多内容”。当我单击 "Read more" 文本时,它应该展开并在末尾显示“Less”。
单击 "Less" 文本时,文本将折叠。
我在 google 中找到了许多示例作品。但是,我不太清楚,大多数项目都是用 Objective-C 实现的。我也在 youtube 上找到它。
我想知道用 Swift 3 实现这个的示例代码。
我可以在不使用任何额外库的情况下实现吗?
请帮帮我。
- 为您的
messageLabel
的高度限制创建一个插座
- 将 "Read more" 按钮的顶部布局设置为
messageLabel
点击 "Read more" 按钮增加高度约束常数,点击 "Read less" 减少高度约束常数。
@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
}
我已经通过修剪字符串完成了。
我们可以通过.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
}
我想在段落末尾添加“阅读更多内容”。当我单击 "Read more" 文本时,它应该展开并在末尾显示“Less”。
单击 "Less" 文本时,文本将折叠。
我在 google 中找到了许多示例作品。但是,我不太清楚,大多数项目都是用 Objective-C 实现的。我也在 youtube 上找到它。
我想知道用 Swift 3 实现这个的示例代码。
我可以在不使用任何额外库的情况下实现吗?
请帮帮我。
- 为您的
messageLabel
的高度限制创建一个插座
- 将 "Read more" 按钮的顶部布局设置为
messageLabel
点击 "Read more" 按钮增加高度约束常数,点击 "Read less" 减少高度约束常数。
@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
}
我已经通过修剪字符串完成了。
我们可以通过.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
}