Отображение времени как в системных часах - PullRequest
0 голосов
/ 19 марта 2019

Я хочу сделать отображение времени, как в системных часах iOS (время прописными буквами, а часть дня маленьким, но прописным).

iOS Alarm.app table cell

Я знаю, что мне нужна помощь приписанной строки, но я не знаю, как сделать ее совместимой с различными форматами отображения времени (12 и 24 часа), разными языками и локальным местоположением.

1 Ответ

0 голосов
/ 20 марта 2019

Чтобы получить время в строковом представлении в соответствии с языковым стандартом пользователя, вы можете использовать:

let formatter = DateFormatter()
formatter.timeStyle = DateFormatter.Style.short //Or in short formatter.timeStyle = .short
let time = formatter.string(from: Date())

Например, оно возвращает вам 23:47 для России и 23:47 для США.

Затем мы можем проверить, возвращен ли формат времени с частью дня для локали пользователя.Если это так, мы устанавливаем другой шрифт для двух последних символов в строке, что является нашей дневной частью.

if let range = time.range(of: formatter.amSymbol) ?? time.range(of: formatter.pmSymbol) {
    let fontSize: CGFloat = 8.0
    let nsRange = NSRange(range, in: time)

    let attrString = NSMutableAttributedString(string: time)
    attrString.addAttributes([.font: UIFont.systemFont(ofSize: fontSize)], range: nsRange)

    label.attributedText = attrString
} else {
    label.text = time
}
...