ios – 阅读/查看标签末尾的更多信息

我正在尝试在标签的末尾创建一个read more按钮.我希望它显示3行.我编写的是快速而非客观的c.只有当用户点击标签的更多部分时,标签才会展开.除了在Instagram上,它应该看起来和工作完全像在Instagram上一样,它在tableview单元格中.我的标签和阅读更多按钮将在滚动视图中.我已经设法通过调整标签的行数属性来扩展和收缩部分.

if descriptionLabel.numberOfLines == 0{
    descriptionLabel.numberOfLines = 3
}else {
    descriptionLabel.numberOfLines = 0
}
descriptionLabel.lineBreakMode = NSLineBreakMode.byWordWrapping

我在标签的末尾添加“… more”并在正确的位置剪切文本时遇到问题.我看过其他人对类似问题的回答,但似乎没有什么工作正常.

我可以在最后一行文本上放一个按钮,这样看到标签的更多部分可点击也不是问题.我遇到的问题是在正确的位置截断文本并将更多文本放在正确的位置以便显示.

我还希望read more按钮仅在必要时出现.当只有1-3行文本时,我不希望它出现.这也是我遇到的问题.

我不能使用这个https://github.com/apploft/ExpandableLabel,因为它不支持滚动视图只是tableviews.

这里的快速解决方案无效:Add “…Read More” to the end of UILabel.它崩溃了应用程序.

最后,read more按钮应该与文本的最后一行和它的末尾一致.这也是一个额外的好处,它也适用于tableview单元格!

解决方法

我在Github中找到了 ReadMoreTextView,它基于UITextView.该库中的关键方法如下:

private func characterIndexBeforeTrim(range rangeThatFits: NSRange) -> Int {
    if let text = attributedReadMoreText {
        let readMoreBoundingRect = attributedReadMoreText(text: text,boundingRectThatFits: textContainer.size)
        let lastCharacterRect = layoutManager.boundingRectForCharacterRange(range: NSMakeRange(NSMaxrange(rangeThatFits)-1,1),inTextContainer: textContainer)
        var point = lastCharacterRect.origin
        point.x = textContainer.size.width - ceil(readMoreBoundingRect.size.width)
        let glyphIndex = layoutManager.glyphIndex(for: point,in: textContainer,fractionOfdistanceThroughGlyph: nil)
        let characterIndex = layoutManager.characterIndexForGlyph(at: glyphIndex)
        return characterIndex - 1
    } else {
        return NSMaxrange(rangeThatFits) - readMoreText!.length
    }
}

显示像“xxxx … Read More”这样的文本库

>获取UITextView中可显示的字符数:使用NSLayoutManager.characterRange(forGlyphRange:,actualGlyphRange

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...