Подкласс UILabel в RubyMotion для установки кернинга attributeText

Мне нужно поддерживать пользовательский кернинг для некоторых моих меток, которые добавляются через Interface Builder (IB). Пользовательский класс устанавливается на метке в IB, и там же устанавливается текст. Попытка переопределить свойство text свойством attributedText не работает.

Это отлично работает для моего подкласса UIButton, но аналогичная техника не работает с UILabel.

Свойство attributedText, похоже, не оказывает никакого влияния, если установлено в awakeFromNib или drawRect:rect.

Пример

class KernedLabel < UILabel

  def awakeFromNib
    super

    attributed_text = NSMutableAttributedString.alloc
      .initWithString("Atributed Text")

    attributed_text.addAttribute(NSKernAttributeName,
                                 value: 1.0,
                                 range: [0, attributed_text.length])

    attributedText = attributed_text
  end

end

person wprater    schedule 13.12.2013    source источник


Ответы (1)


Ваш код отлично работает для меня с одним небольшим изменением: вам нужно использовать self.attributedText = (вызов метода на self):

def awakeFromNib
  super

  attributed_text = NSMutableAttributedString.alloc
    .initWithString("Atributed Text")

  attributed_text.addAttribute(NSKernAttributeName,
                               value: 1.0,
                               range: [0, attributed_text.length])

  self.attributedText = attributed_text
end
person Dylan Markow    schedule 14.12.2013
comment
Конечно, это метод установки, а не свойство. Однако я не вижу применения кернинга, не так ли в вашем тесте? - person wprater; 17.12.2013
comment
Да, этот точный код выше создавал текст с дополнительным интервалом между каждой буквой (в iOS 7) - person Dylan Markow; 17.12.2013