【问题标题】:Superscript string in SwiftSwift 中的上标字符串
【发布时间】:2018-04-11 23:16:08
【问题描述】:

我正在尝试让我的应用中的用户更容易阅读我的文本。我正在从“https://api.myjson.com/bins/ss5jb”的 JSON 中读取我的文本。有没有办法在我的 collectionView 枚举字符串中为 verseNumber 上标并将其颜色更改为浅灰色?

枚举字符串是配对 verseNumber 和 verse 的最佳方式吗?

import UIKit

class PageCell: UICollectionViewCell {
    let textLabel: UITextView = {
        let label = UITextView()
        //Custom Font//
        guard let customFont = UIFont(name: "CormorantGaramond-Medium", size: 20) else {
            fatalError("""
        Failed to load the "RCormorantGaramond-Medium" font.
        Make sure the font file is included in the project and the font name is spelled correctly.
        """
            )
        }
        //End Custom Font//
        label.font = customFont
        label.text = ""
        label.translatesAutoresizingMaskIntoConstraints = false
        label.isEditable = false
        label.isUserInteractionEnabled = false
        return label
    }()

    override init(frame: CGRect) {
        super.init(frame: frame)

        addSubview(textLabel)

        //textLabel Constraints
        textLabel.topAnchor.constraint(equalTo: self.topAnchor, constant: 40).isActive = true
        textLabel.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
        textLabel.rightAnchor.constraint(equalTo: self.rightAnchor, constant: -15).isActive = true
        textLabel.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 30).isActive = true

    }
}




override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let pageCell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId2", for: indexPath) as! PageCell
        let page = book?.pages[indexPath.item]

        if let page = page {
            let enumeratedPage = page.text.enumerated()
            pageCell.textLabel.text = enumeratedPage.reduce("") { (result: String, textPair) -> String in

                let result = "\(result)\n"
                let verseNumber = "\(textPair.offset + 1)   "
                let verse = "\(textPair.element)"

                return result + verseNumber + verse
            }
        }

        return pageCell
    }

【问题讨论】:

  • 你的意思是说你希望你的文本是灰色的,对吗?
  • 对,就是verseNumber的颜色

标签: swift swift4 swift4.1


【解决方案1】:

有两种方式:

方式一:- NSAttributed String

let mainText = "Here is a example of attributedString"
let attributeText = "attributedString"
let range = (mainText as NSString).range(of: attributeText)
let attributedString = NSMutableAttributedString(string:mainText)

attributedString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red, range: range)
attribute.addAttribute(NSFontAttributeName, value: UIFont.systemFont(ofSize: 14) , range: range)

lblTitle.attributedText = attributedString

方式:- 2 你可以使用 HTML 属性:

 let htmlString = "<font color=\"red\">This is  </font> <font color=\"blue\"> some text!</font>"

let encodedData = htmlString.data(using: String.Encoding.utf8)!
let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType]
do {
    let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil)
    label.attributedText = attributedString

} catch _ {
    print("Cannot create attributed String")
}

【讨论】:

    【解决方案2】:

    为此使用NSAttributedStrings。您可以更改文本颜色、基线偏移和字体以达到您想要的效果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多