2017-01-31 17 views
0

У моего UILabel есть длинный текст (текст отличается для разных ситуаций и языков, я использую AttributedString), он заканчивается количеством. Smth как:UILabel выпуск с суммой

This amount will be taken from your account: 12.00 $ 

Этикетка имеет numberOfLines = 0, так что иногда текст выглядит

This amount will be taken from your account: 12.00 
$ 

И это очень важно, чтобы не установить разрыв строки между 12.00 и $, потому что это выглядит очень плохо. Есть ли какой-либо специальный символ, например   в html, так что я могу положить его между 12.00 и $? Итак, UILabel никогда не делал разрыва между 12 и $?

Так что я хочу:

This amount will be taken from your account: 
12.00 $ 

или

This amount will be taken from your account: 12.00 $ 

или

This amount will be taken from 
your account: 12.00 $ 

, но оно никогда не должно быть, как

This amount will be taken from your account: 12.00 
$ 
+0

увидеть этот раз http://stackoverflow.com/questions/3527494/how-to- calculate-uilabel-width-based-on-text-length –

+0

Я не думаю, что это на самом деле дубликат, потому что в этом случае универсальное решение для замены пространства неразрывным пространством не является оптимальным. – Sulthan

ответ

4

Есть ли какой-либо специальный символ, например  , в html, так что я могу положить его между 12.00 и $?

В этом случае, вы можете изменить значение NOBREAK символ пробела \u00a0

Пример:

let text = "This amount will be taken from your account: 12.00\u{00a0}$" 

enter image description here

-1

Поэтому убедитесь, что вы не установили ограничение высоты на ваш ярлык и сделайте это.

var value = 12.00 
yourLabel.numberOfLines = 0 
yourLabel.text = "This amount will be taken from your account: \n \(value) $" 
+0

Я не уверен, кто проголосовал и ответил и почему? По крайней мере, оставляйте повод. –

+0

Здравствуйте, я думаю, что ваш ответ был отклонен, потому что он не дает ожидаемого результата для OP. Это будет всегда * позволять значению и «$» находиться на новой строке, что здесь не так. Чтобы уточнить, что, если «Эта сумма будет взята из вашей учетной записи:» была только «принятая сумма»? –

0

Вы можете добавить неизменяемый символ пробела в Юникоде, однако то, что вы делаете, неверно.

Вы должны использовать NSNumberFormatter со стилем, установленным на .currency и currencyCode, установленным на USD.

Это даст вам:

  1. неразрывный пробел автоматически
  2. правильное форматирование для всех языков (то есть $12.00 на английском языке, $(12.00) для отрицательных сумм на английском языке, 12.00 US$ в европейских районов).
0

Обратите внимание, что я указываю на дублированный вопрос.

Как указано в duplicated question, вам необходимо использовать "No-Break Space" unicode character "\u00a0".

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

let formatter = NumberFormatter() 
formatter.numberStyle = .currency 
if let amount = formatter.string(from: 12.0 as NSNumber) { 
    print(amount) // $12.00 
} 
+1

не нужно устанавливать языковой стандарт форматирования в текущую локаль. Это значение по умолчанию. Кроме того, locale является структурой. вы можете просто «formatter.locale = Locale.current». – Sulthan

+0

@ Султан благодарит вас за внимание. –

 Смежные вопросы

  • Нет связанных вопросов^_^