Я создал образец проекта, чтобы воспроизвести это.Autolayout добавление дополнительных дополнений сверху и снизу UILabel iPhone 6/6 +, если выбраноMaxLayoutWidth установлено
У меня есть xib-файл с UILabel с фиксированным верхним, ведущим и конечным ограничениями. Я добавил ограничение minHeight и установил количество строк в 0.
Я установил для preferredMaxLayoutWidth значение Automatic (отмечено в файле xib).
В viewDidLoad, у меня это:
self.myLabel.layer.borderColor = [[UIColor redColor] CGColor]; self.myLabel.layer.borderWidth = 2.0f;
self.myLabel.text = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
И когда я запустить симулятор на iPhone 6 или 6+, я получаю это:
Я понятия не имею, откуда идет верхняя и нижняя прокладка, и она пропорциональна отображается количество символов в UILabel.
Есть ли какая-то волшебная установка, которую я забыл? Он отлично работает на устройствах iPhone 4.
Теперь, если я не устанавливаю предпочтительныйMaxLayoutWidth, у него нет дополнительного дополнения, но это прерывает мои многострочные линии в UILabel. Оно отсекает текст. не использовать Размер-Class
Edit:..
Так что я изменил кое-что на моем образце проекта, чтобы соответствовать ситуации на моем реальном проекте я добавил Tableview (с верхом, ведущий, нижний и конечные ограничения устанавливаются в его родительском представлении). Каждая ячейка в таблицеView имеет 4 метки. Верхняя метка имеет верхнее, ведущее и конечное ограничение для contentView ячейки, а последующие метки имеют вертикальную al ограничение метки над ним. Каждая метка имеет набор ограничений heightGreaterThan и набор widthGreaterThan.
Как выглядит это без специального набораMaxLayoutWidth (обратите внимание, как метки ограничены до 1 строки).
С preferredMaxLayoutWidth. Теперь UILabel показывает весь контент, но имеет дополнение сверху и снизу.
Edit2: Пример проекта: https://www.dropbox.com/s/sdahx9njnsxiv98/MultiLineUILabel.zip?dl=1
У меня есть точно такая же проблема, как вы. Я даже попытался взломать 'preferredMaxLayoutWidth', добавив несколько пикселей, но это число сильно зависит от того, насколько широкий экран и отличается по-разному на iPhone 6, iPhone 6+ и iPhone 5. Не говоря уже о iPad. Не уверен, что это ошибка, или если есть другие настройки/взлома, чтобы заставить ее работать. –
У меня была такая же проблема, и я не использовал автоматическую компоновку. Проблема возникла только на iPhone 6, а не на iPad. Никакая комбинация настроек маски авторезистирования не имела никакого значения. В конце концов я решил проблему, выполнив очистку, перезагрузку XCode и перестройку. Странно, но он решает проблему, когда чистая сама по себе не будет. XCode 6.1.1. – JasonD
Убедитесь, что предпочтительная ширина метки установлена на «Автоматически», а «Явная» не отмечена на панели настроек. Это решило проблему для меня при использовании autotlayout. – AndyC