2014-10-22 2 views
0

Имеет странную проблему с использованием автоматической компоновки с UILabel, где она изменяет размер почти до размера своего содержимого меньше одной строки (меня гайки). Таким образом, в основном, кажется, доходит до того места, где оно должно составлять минус несколько пикселей, что приводит к появлению эллипсов в конце при сокращении до iPhone 5 или 6. Он отлично работает на 6+, для чего предназначен размер XIB.UILabel не полностью изменяет размер с помощью автоматической компоновки (почти по одной строке)

Вот что такое XIB и что у меня есть ограничения. Метка - это «Большая длинная метка, вот описание события».

enter image description here

На основе этого stack post, я думал, что я собирался, чтобы понять это. Я пробовал оба метода, упомянутых в сообщении. Все четыре ограничения на скриншоте установлены в 1000. Если я сделаю то, что пишет сообщение, и добавьте ограничение высоты с приоритетом 500, что меньше приоритетов вертикального обхода и вертикального сжатия, оно все равно не работает. Я также просто не установил ограничение по высоте, сохранил предпочтительную ширину и установил ограничения на ведущее и конечное пространство, о которых упоминалось в комментариях. Количество линий установлено равным 0.

Чтобы сделать ставку, UILabel находится в UIView, установленном как contentView. Затем я добавляю contentView в UIScrollView. UIScrollView автоматически настраивается путем закрепления contentView на 0 для всех четырех сторон. contentContainer также ограничен шириной экрана (не идеально, но только так, как я смог заставить его работать), не уверен, что это имеет какое-либо отношение к этой проблеме). Я не получаю никаких проблем с ограничениями в консоли. translatesAutoresizingMaskIntoContraints установлено на NO для contentView. Вот что UILabel выглядит, когда гласил:

enter image description here

Она должна быть одна строка длиннее в нижней части, чтобы соответствовать. Кто-нибудь, пожалуйста, помогите мне!

ответ

3

Я думаю, что я, возможно, решил это, но решение кажется взломанным. Казалось, это проблема установки preferredMaxLayoutWidth. Он отлично справился с тем, что я установил для iPhone 6+, но по некоторым причинам почти получил там со значительно меньшей шириной на iPhone 5/6. Только что добавил:

self.eventDescriptionLabel.preferredMaxLayoutWidth = self.eventDescriptionLabel.frame.size.width; 

И теперь это прекрасно работает.

+1

Да, это правильный способ исправить вашу проблему, и да, это хаки. Apple действительно должна что-то сделать в этом imho, потому что это бросает много людей. Если вы подклассифицируете UILabel, поместите там этот код, а затем используйте свой подкласс вместо UILabel напрямую, тогда вы сэкономите себе много головных болей. – xsee

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