Удалите цветной фон пустых пространств UILabel, который использует NSMutableAttributedString - PullRequest
0 голосов
/ 08 ноября 2018

Я хотел бы знать, возможно ли, на UILabel, который использует NSMutableAttributedString, удалить цветной фон, который установлен в пустых местах в начале каждой строки, когда установлено выравнивание до вправо .

Obs .: все работает нормально, если для выравнивания установлено значение left

enter image description here

enter image description here

Это то, что я ожидаю:

enter image description here


Дополнительный вопрос: Можно ли оставить пробел между строками без цвета?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Так что я потратил 45 минут, чтобы найти решение этой проблемы. Я использовал свое собственное расширение UILabel для подсветки текстов, но, к сожалению, оно выделяет пустые пробелы или, скорее, отступы, когда textAlignment установлен вправо, как ваша проблема.

Я понял, что не могу найти никакого другого решения, кроме как использовать этот модуль: TTTAttributedLabel https://github.com/TTTAttributedLabel/TTTAttributedLabel

Это очень хорошо обрабатывает настройку атрибутивной строки для UILabel. Модуль был написан на Objective-C, поэтому для этого вам понадобится соединительный заголовок. Я полагаю, вы уже знаете, как переносить коды Objective-C в ваши проекты Swift.

override func viewDidLoad() {
    super.viewDidLoad()

    self.view.backgroundColor = .gray

    let label = TTTAttributedLabel(frame: .zero)
    label.textAlignment = .right
    label.numberOfLines = 0


    let attr: [NSAttributedString.Key: Any] = [
        .font: UIFont.boldSystemFont(ofSize: 16.0),
        .foregroundColor: UIColor.black,
        .backgroundColor: UIColor.green
    ]

    label.text = NSAttributedString(string: "How can I Remove\nthe space at the\nbeginning?", attributes: attr)

    self.view.addSubview(label)
    label.translatesAutoresizingMaskIntoConstraints = false

    self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .top, relatedBy: .equal, toItem: self.view, attribute: .top, multiplier: 1.0, constant: 300))
    self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .leading, relatedBy: .equal, toItem: self.view, attribute: .leading, multiplier: 1.0, constant: 0))
    self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .trailing, relatedBy: .equal, toItem: self.view, attribute: .trailing, multiplier: 1.0, constant: 0))

}

Результат: enter image description here

Надеюсь, это поможет!

0 голосов
/ 08 ноября 2018

Установите backgroundColor вашего ярлыка на Белый или Чистый цвет и примените цвет фона к вашему NSMutableAttributedString, как показано ниже,

//In Swift
let mutableAttributedString = NSMutableAttributedString() //Initialize your string here
mutableAttributedString.addAttribute(NSAttributedString.Key.backgroundColor, value: UIColor.yellow, range: NSMakeRange(0, mutableAttributedString.length))

//In Objective C
NSMutableAttributedString *mutableAttributedString; //Initialize your string here
[mutableAttributedString addAttribute:NSBackgroundColorAttributeName value:[UIColor yellowColor] range:NSMakeRange(0, mutableAttributedString.length)];

Если вы используете storyBoard, измените backgroundColor приписанной строки, как показано на прикрепленном изображении. enter image description here

Только что понял, что решение выше будет работать для сценариев ниже,

  1. Максимум две строки с выравниванием по левому краю
  2. Максимум одна строка с правым и центральным выравниванием

Пожалуйста, следуйте этому сообщению для полного решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...