ios: текст неправильно переносится на iPhone 5S и более ранних версиях (4-дюймовые устройства и меньше)

У меня есть этикетка, которая должна быть обернута вокруг. На нем есть 4 ограничения (верхнее/нижнее и ведущее/конечное — других ограничений нет). Этикетка правильно обтекается на iPhone 6, т. е. с экраном 4,7 дюйма, и iPhone 6 Plus, т. е. с экраном 5,5 дюйма, но обрезается по правому краю на устройствах с экраном 4 дюйма или меньше. См. снимок экрана ниже.

введите здесь описание изображения

Как будто он считает, что доступная ширина больше фактической ширины устройства. есть идеи? (извините, я не могу опубликовать встроенное изображение, потому что для этого требуется как минимум 10 повторений)

FWIW: Вот ограничения на метку (я пишу их в псевдокоде, потому что они установлены в IB).

label.top = top margin
label.bottom = bottom margin
label.leading = leading margin
label.trailing = trailing margin

person ishaq    schedule 25.01.2016    source источник
comment
a.Какую самую раннюю версию iOS вы поддерживаете? b. Количество строк вашей метки в раскадровке равно 0? c. Пробовали ли вы выполнить label.sizeToFit() после присвоения текста?   -  person MatanGold    schedule 25.01.2016
comment
Я не поддерживаю ничего ниже iOS 9.0. да количество строк установлено на 0. Я не думаю, что это проблема sizeToFit, потому что он не отображает одну длинную строку текста. это обертывание, но не в том месте.   -  person ishaq    schedule 25.01.2016
comment
@Quentin спасибо за редактирование изображения, чтобы оно было встроенным.   -  person ishaq    schedule 25.01.2016
comment
Попробуйте удалить ограничения и добавить их снова, но с параметром Связано с маржей, не отмеченным флажком.   -  person MatanGold    schedule 25.01.2016
comment
@MatanGold спасибо, на самом деле я уже пробовал это. не помогает.   -  person ishaq    schedule 25.01.2016
comment
Постарайтесь оправдать свой текст лейбла. label.textAlignment = NSTextAlignment.Justified. Если это не сработает, можете ли вы опубликовать код ограничений или изображение для лучшего понимания.   -  person Ramesh_T    schedule 25.01.2016


Ответы (2)


В вашей main_storyboard перейдите на нижнюю панель и щелкните инспектор компактных размеров (или как бы он ни назывался) и выберите этот

введите здесь описание изображения

попробуй убрать там все ограничения и добавить заново

person Nikolai Volodin    schedule 25.01.2016

Я выяснил, в чем проблема. Этот label находился в ячейке типа TextCell, и вот что я делал в методе TextCell layoutSubviews:

override func layoutSubviews() {
    super.layoutSubviews()

    // ... snip ...

    self.text.preferredMaxLayoutWidth = 375 // This is the offending line
}

Измените preferredMaxLayoutWidth на нормальное значение (например, CGRectGetWidth(self.label.frame)), чтобы исправить это.

Обратите внимание, что приведенное выше является упрощением сути проблемы, суть которой заключается в том, что если у вас возникают проблемы с меткой автоматического изменения размера в Cocoa Touch, всегда проверяйте, что для preferredMaxLayoutWidth установлено правильное значение

Вот связанный с этим вопрос (указал мне в правильном направлении): UILabel не обертывается текст иногда корректен (автоматическая компоновка)

person ishaq    schedule 26.01.2016