Я хочу настроить UITextField
leftView
с видом, размер которого автоматически изменяется в зависимости от его содержимого:
func set(leftImage image: UIImage) {
let imageView = UIImageView(image: image)
let paddingContainer = UIView()
// This is the crucial point:
paddingContainer.translatesAutoresizingMaskIntoConstraints = false
paddingContainer.addSubview(imageView)
imageView.pin(toMarginsOf: paddingContainer)
leftView = paddingContainer
leftViewMode = .always
}
, где метод pin
просто закрепляет представление изображения на всехчетыре стороны к полям paddingContainer
:
func pin(toMarginsOf view: UIView) {
translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor),
.bottomAnchor.constraint(equalTo: view.layoutMarginsGuide.bottomAnchor),
leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor),
trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.bottomAnchor)
])
}
В iOS 12 все работает, как и ожидалось, но в версиях iOS <12 изображение совершенно неуместно.Это даже не в пределах текстового поля, а в верхнем левом углу представления моего контроллера представления. </p>
Мне кажется, что более старые версии iOS не поддерживают использование Auto Layout внутри установленного представлениякак текстовое поле leftView
.Документация гласит:
Вид с наложением слева помещается в прямоугольник, возвращаемый методом leftViewRect(forBounds:)
получателя.
, но не указывает как он там находится: используя ограничения или устанавливая фрейм напрямую.
Есть ли надежные источники или обоснованные предположения, если использование Auto Layout вообще поддерживается для leftView
?