NSAttribuedString строки верхнего и нижнего интервала изменены на iOS 13,4 - PullRequest
0 голосов
/ 20 апреля 2020

При обновлении iOS 13.4 интервалы между верхним и нижним строками NSAttributedString не совпадают.

Этот код работает на iOS 13,3 и iOS 13,4.

iOS 13,3 iOS 13.3

iOS 13.4 enter image description here

Вот код для генерации приписанной строки с этим стилем:

struct Utility {
    static func customAttributedString(first: String, second: String, firstColor: UIColor = .white, secondColor: UIColor = .purple, size: CGFloat = 60) -> NSAttributedString {

        let styleAttributes = NSMutableParagraphStyle()
        let stringAttributes:[NSAttributedString.Key: Any] = [.font : (UIFont.drukBold?.withSize(size))!,
                                                              .foregroundColor: firstColor,
                                                              .paragraphStyle: styleAttributes]

        let stringSecondAttributes:[NSAttributedString.Key: Any] = [.font : (UIFont.drukBold?.withSize(size))!,
                                                                    .foregroundColor: secondColor,
                                                                    .paragraphStyle: styleAttributes]

        let string = "  \(first)  ".uppercased()
        let secondString = "\n  \(second)  ".uppercased()
        let mutable = NSMutableAttributedString(string: string, attributes: stringAttributes)
        let secondMutable = NSMutableAttributedString(string: secondString, attributes: stringSecondAttributes)
        mutable.append(secondMutable)
        var startIndex = mutable.string.startIndex
        while let range = mutable.string.range(of: "\\n", options: .regularExpression, range: startIndex..<mutable.string.endIndex) {
            mutable.addAttribute(.backgroundColor, value: UIColor.black, range: NSRange(Range(uncheckedBounds: (lower: startIndex, upper: range.lowerBound)), in:  mutable.string))
            startIndex = range.upperBound
        }
        mutable.addAttribute(.backgroundColor, value: UIColor.black, range: NSRange(Range(uncheckedBounds: (lower: startIndex, upper:  mutable.string.endIndex)), in:  mutable.string))
        return mutable
    }
}

Есть ли способ иметь одинаковые верх и низ интервал в обеих версиях?

РЕДАКТИРОВАТЬ: На самом деле я играл на NSAttributedString, чтобы узнать, что является причиной этого, и я только что обнаружил, что использование системного шрифта будет иметь нужное поведение без проблем. Я не знаю, почему поведение пользовательских шрифтов изменилось между версиями? может быть, они изменили способ обработки пользовательских шрифтов

...