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