Если ложь translatesAutoResizingMaskIntoConstraints ложна, это вызывает неоднозначную проблему с разметкой в ​​правом представлении UITextFields - PullRequest
0 голосов
/ 28 сентября 2018

Я не знаю, является ли создание каждого объекта translatedAutoresizingMaskIntoConstraints flag false ложной привычкой, но вот мой вопрос, связанный с этим;У меня есть объект UITextField, и я устанавливаю его rightView как UIImageView, но когда свойство translinesAutoresizingMaskIntoConstraints UIImageView устанавливает значение false в иерархии представления отладки, появляется неоднозначное предупреждение о разметке, документация apple гласит в разделе translatesAutoresizingMaskIntoConstraints:

Если вы хотите использоватьАвтоматическая разметка для динамического расчета размера и> положения вашего представления, вы должны установить для этого свойства значение false, а затем> предоставить не двусмысленный, не конфликтующий набор ограничений для представления.

но естьметод UITextField

open func rightViewRect(forBounds bounds: CGRect) -> CGRect

, который

Возвращает расположение чертежа для правого наложения получателя.

Дополнительно, когда я пытаюсь задать ограничениямежду rightView и UITextField, он говорит, что они не находятся в одной иерархии.Так почему принятие этого флага как ложного вызывает неоднозначное расположение?

let imageView = UIImageView(image: UIImage(named: "infoIcon"))
imageView.contentMode = .scaleAspectFit
imageView.translatesAutoresizingMaskIntoConstraints = false //this line causes ambiguous layout
imageView.widthAnchor.constraint(equalToConstant: 15).isActive = true
textField.rightViewMode = .unlessEditing
textField.rightView = imageView

1 Ответ

0 голосов
/ 30 января 2019

У меня была похожая проблема, но в моем случае я забыл добавить add translatesAutoresizingMaskIntoConstraints как ложное.

То, что вы написали о translatesAutoresizingMaskIntoConstraints, является правильным.И, как правило, это не очень хорошая пара, когда вы используете набор рамок или границ.

В любом случае, я попробовал ваш код, и у меня есть представление о том, что может произойти;

  • Сначала проверьте ограничения UITextField.Если ваше ограничение не подходит, то оно может быть разорвано после добавления rightView.
  • Во-вторых, запустите ваш imageView с рамкой, как показано ниже;
let imageView = UIImageView(frame: .zero)
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.image = UIImage(named: "logo") imageView.contentMode = .scaleAspectFit
imageView.widthAnchor.constraint(equalToConstant: 15).isActive = true
textField.rightViewMode = .always 
textField.rightView = imageView
  • И, наконец, я думаю, что было бы лучше, если вы не используете imageView.widthAnchor.constraint(equalToConstant: 15).isActive = true Используйте изображение с наилучшим оптимальным разрешением для вашего текстового поля, и отдых будет в порядке.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...