2015-12-20 4 views
2

У меня есть UILabel, и всякий раз, когда я устанавливаю его выход, прокладка, которую я создал в Storyboards, для нее под атрибутом текста исчезает, как будто этого не было. Текст остается застрявшим с левой стороны. Как я могу исправить эту проблему?Как исправить ошибку UILabel?

@IBOutlet weak var mycoollabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 

    mycoollabel.text = "Wow" 
} 
+0

Что вы используете для настройки прокладки? – TwoStraws

+0

@TwoStraws Я установил свойство Text в Xcode для атрибуции, затем перешел в «отступ строки» и положил 7 пикселей – JakeC

+0

Посмотрите, если это поможет: http://stackoverflow.com/a/34054468/341994 – matt

ответ

2

Примечание: ОП разъясняет в комментарии, что они устанавливают свои отступы, используя атрибутный текст в Interface Builder.

Проблемы здесь путаница между текстом и приписываемого текстом, или, потому что это код, это text и attributedText.

На iOS много вещей имеют свойство text, и это просто простая строка текста, которая отображается где-то без какого-либо форматирования. Обычно форматирование привязывается к объекту, который показывает текст, например. метка имеет свойства цвета текста и выравнивания, которые делают его text выглядеть, как вы хотите.

На iOS большинство (все?) Этих вещей также имеют свойство attributedText, которое является совсем другим зверем. Атрибутный текст содержит строку, а также специальные инструкции по форматированию, необходимые для отображения этих атрибутов строкового текста, отсюда и название.

Таким образом, OP создает атрибутную конфигурацию текста в своем раскадровке, а затем в коде, изменяя свойство text. Это перезапишет их форматированную строку простой строкой, потеряв конфигурацию макета.

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

let ps = NSMutableParagraphStyle(); 
ps.firstLineHeadIndent = 50 

let attrs = [NSParagraphStyleAttributeName: ps] 
let attributedString = NSAttributedString(string: "Hello, world!", attributes: attrs) 

label.attributedText = attributedString 

Обратите внимание, что существует несколько различных вариантов, доступных для вас здесь, так что вам, возможно, потребуется найдите нужный тип отступа для ваших точных потребностей. Если вы щелкните правой кнопкой мыши на NSMutableParagraphStyle и выберите «Перейти к определению», вы увидите все варианты.

+0

Спасибо за такой подробный ответ, и это woks отлично! Могу ли я спросить, что, если я не использовал приписанный текст, но вместо этого просто попробовал это? – JakeC

+0

Добро пожаловать - я рад, что это сработало. Если вы используете Plain, вы просто устанавливаете свойство 'text', поэтому в раскадровке или исходном коде не будет никакого отступа. Учитывая ваше требование иметь отступ, вы должны использовать 'attributedText', начиная с моего примера выше. – TwoStraws

+0

еще раз спасибо! Кстати, я просто нажал на ваше имя и понял, что вы тот, кто стоит в Hacking With Swift! Я многое узнал оттуда. – JakeC

1

Это потому, что UILabel может иметь либо простой текст или приписываемый текст. Вы устанавливаете атрибутный текст в раскадровке и добавляете некоторое форматирование (отступы и т. Д.). Затем в коде вы переопределяете этот текст (и все его форматирование) простым текстом.

Если вы хотите сохранить форматирование, вам необходимо установить свойство attributedText. И добавьте все необходимое форматирование в объект NSAttributedString, который вы создаете для этого.

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