Swift NSAttributedString修剪

Tom*_*Wei 15 cocoa-touch ios swift

我想在我的NSAttributedString(修剪它)的前面和末尾骑上白色空间.我不能简单地将其转换为字符串并进行修剪,因为其中有图像(附件).我该怎么做?

Bha*_*iya 22

创建扩展名NSAttributedString如下.

extension NSAttributedString {
     public func attributedStringByTrimmingCharacterSet(charSet: NSCharacterSet) -> NSAttributedString {
         let modifiedString = NSMutableAttributedString(attributedString: self)
         modifiedString.trimCharactersInSet(charSet)
         return NSAttributedString(attributedString: modifiedString)
     }
}

extension NSMutableAttributedString {
     public func trimCharactersInSet(charSet: NSCharacterSet) {
         var range = (string as NSString).rangeOfCharacterFromSet(charSet)

         // Trim leading characters from character set.
         while range.length != 0 && range.location == 0 {
             replaceCharactersInRange(range, withString: "")
             range = (string as NSString).rangeOfCharacterFromSet(charSet)
         }

         // Trim trailing characters from character set.
         range = (string as NSString).rangeOfCharacterFromSet(charSet, options: .BackwardsSearch)
         while range.length != 0 && NSMaxRange(range) == length {
             replaceCharactersInRange(range, withString: "")
             range = (string as NSString).rangeOfCharacterFromSet(charSet, options: .BackwardsSearch)
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

并在viewController中使用你想要使用的地方.像这样

let attstring = NSAttributedString(string: "this is test message. Please wait.                   ")
let result = attstring.attributedStringByTrimmingCharacterSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
Run Code Online (Sandbox Code Playgroud)


小智 7

即使在文字中使用表情符号也可以使用

extension NSAttributedString {

    /** Will Trim space and new line from start and end of the text */
    public func trimWhiteSpace() -> NSAttributedString {
        let invertedSet = CharacterSet.whitespacesAndNewlines.inverted
        let startRange = string.utf16.description.rangeOfCharacter(from: invertedSet)
        let endRange = string.utf16.description.rangeOfCharacter(from: invertedSet, options: .backwards)
        guard let startLocation = startRange?.upperBound, let endLocation = endRange?.lowerBound else {
            return NSAttributedString(string: string)
        }

        let location = string.utf16.distance(from: string.startIndex, to: startLocation) - 1
        let length = string.utf16.distance(from: startLocation, to: endLocation) + 2
        let range = NSRange(location: location, length: length)
        return attributedSubstring(from: range)
    }

}
Run Code Online (Sandbox Code Playgroud)

用法

let attributeString = NSAttributedString(string: "\n\n\n     Hi  ??????????????????????????? buddy.              ")
let result = attributeString.trimWhiteSpace().string // Hi  ??????????????????????????? buddy.
Run Code Online (Sandbox Code Playgroud)