2017-02-19 6 views
2

Итак, у меня есть два UIViews, UILabel и UITextField, первый - это название поля, второе - это то, где информация будет напечатана .. Вот как я «м устанавливая их AutoLayout Ограничения:Ширина UILabel превышает текст с помощью запрограммированной автоматической компоновки

для поля ввода:

//Constraints: 
    inputField.translatesAutoresizingMaskIntoConstraints = false; 
    //Setting trailing = superview(which is called self)'s trailing +2.0 
    NSLayoutConstraint(item: inputField, 
    attribute: .trailing, relatedBy: .equal, 
    toItem: self, attribute: .trailingMargin, 
    multiplier: 1.0, constant: 2.0).isActive = true; 

    //Set Top = superview(which is called self) top -2.0 
    NSLayoutConstraint(item: inputField, 
    attribute: .top, relatedBy: .equal, 
    toItem: self, attribute: .topMargin, 
    multiplier: 1.0, constant: -2.0).isActive = true; 

    //Setting the height = 30 
    NSLayoutConstraint(item: inputField, attribute: .height, 
    relatedBy: .equal, 
    toItem: nil, attribute: .notAnAttribute, 
    multiplier: 1.0, constant: 30).isActive = true; 

Тогда для UILabel (так называемый emailLabel22):

//Constraints: 
    //  Left 
    NSLayoutConstraint(item: emailLabel22, 
    attribute: .leading, relatedBy: .equal, 
    toItem: self, attribute: .leadingMargin, 
    multiplier: 1.0, constant: 2.0).isActive = true; 

    //  Buffer Right 
    NSLayoutConstraint(item: emailLabel22, 
    attribute: .trailing, relatedBy: .equal, 
    toItem: inputField, attribute: .leading, 
    multiplier: 1.0, constant: -8.0).isActive = true; 

    //  Align Tops 
    NSLayoutConstraint(item: emailLabel22, 
    attribute: .top, relatedBy: .equal, 
    toItem: inputField, attribute: .top, 
    multiplier: 1.0, constant: 0).isActive = true; 

    //  Height 
    NSLayoutConstraint(item: emailLabel22, 
    attribute: .height, relatedBy: .equal, 
    toItem: nil, attribute: .notAnAttribute, 
    multiplier: 1.0, constant: 30).isActive = true; 

    //  Buffer Right -- **For Input Field** 
    NSLayoutConstraint(item: inputField, 
    attribute: .leading, relatedBy: .equal, 
    toItem: emailLabel22, attribute: .trailing, 
    multiplier: 1.0, constant: 8.0).isActive = true; 

    //  Locking in Width??? (Should I use this?) 
    NSLayoutConstraint(item: emailLabel22, 
    attribute: .width, relatedBy: .equal, 
    toItem: nil, attribute: .notAnAttribute, 
    multiplier: 1.0, constant: emailLabel22.frame.size.width); 

Суть приведенного выше кода заключается в следующем: inputField выровнен по правому краю с надписью (self). Электронная почта выравнивается влево. У них тогда есть разрыв между ними для эстетики.

Это проблема:

Если я устанавливаю emailLabel22 первым, то это ширина становится огромной и поле ввода будет сплющенная с правой стороны экрана с большим пустым пространством между ними. Like so.

Если я сначала установил поле ввода, как в приведенном выше коде, я затем просунул электронную почту до ее заблокированной ширины, которая в этом случае равна 73. Это означает, что любой текст, который не вписывается в ширину 73pt усекается эллипсисом. Like So

Если я удаляю блокировку по ширине электронной почты, размер inputField расширяется, если я ввожу слова, которые не вписываются в текстовое поле. Like So

Это не было бы проблемой, но я пытаюсь создать надежную комбинацию ярлыков/текстовых полей, чтобы я мог установить любой текст и идеально подогнать его, поэтому я не хочу, чтобы «Заблокировать ширину» метки электронной почты. Я хочу, чтобы он расширялся настолько, насколько он хочет вправо, но в пределах размера текста. Я также не хочу, чтобы inputField сжимал метку электронной почты. Я также не хочу сжимать размер шрифта электронной почты, входное сжимание в порядке.

Я пытался исправить это в течение 3 часов. Я понятия не имею, как это сделать.

Спасибо.

+1

Это поздно ночью, где я нахожусь, поэтому я не имею времени, чтобы помочь, но Apple, на самом деле имеет некоторую хорошую документацию о «внутреннем размере», который выглядит так, как он может помочь: https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/ViewswithIntrinsicContentSize.html – dfd

ответ

2

Try набор обниматься и приоритет сопротивления commpresion на вашем UILabel и UITextField

enter image description here

+0

Я никогда не знал, как их использовать! Теперь я знаю!! Большое вам спасибо (: – QuantumHoneybees

+0

Я так и не помню, поэтому у меня есть это изображение всегда на компьютере –

+0

Не могли бы вы поделиться, где у вас есть этот образ? Мне нравится! – QuantumHoneybees

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