Проблема перекрытия текста в текстовом поле в iOS Swift - PullRequest
0 голосов
/ 16 июня 2020

В моем текстовом поле добавлен вид справа и указатель даты. Когда я выбираю дату, текст накладывается на правый вид.

enter image description here

Я использую класс Designable для добавления правого представления. Как я могу исправить проблему перекрытия

Вот код для настройки правого обзора

rightViewMode = UITextField.ViewMode.always
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 17, height: 17))
imageView.contentMode = .scaleAspectFit
imageView.image = rightImage
imageView.tintColor = color
// Added containerView for repositioning image
let containerView = UIView(frame: CGRect(x: 0, y: 0, width: 40, height: 20))
self.addSubview(containerView)
containerView.addSubview(imageView)
rightView = containerView

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

Я решил свою проблему с помощью этого куска кода:

Added Padding For Textfields
    let padding = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)

 required init?(coder aDecoder: NSCoder) {
   super.init(coder: aDecoder)
 }

 override func textRect(forBounds bounds: CGRect) -> CGRect {
   return bounds.inset(by: padding)
 }

 override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
   return bounds.inset(by: padding)
 }

 override func editingRect(forBounds bounds: CGRect) -> CGRect {
   return bounds.inset(by: padding)
 }
0 голосов
/ 16 июня 2020

Не видя всего вашего кода, трудно сказать, что здесь происходит. Вы используете раскадровки и ограничения? Или вы жестко кодируете все кадры своих представлений?

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

let textField = UITextField()
textField.placeholder = "16 December 2018"

let imageView = UIImageView()
imageView.backgroundColor = .systemBlue

let stackView = UIStackView(arrangedSubviews: [textField, imageView])
stackView.axis = .horizontal
stackView.distribution = .fill
stackView.alignment = .center
stackView.spacing = 10

view.addSubview(stackView)

stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

imageView.widthAnchor.constraint(equalToConstant: 17).isActive = true
imageView.heightAnchor.constraint(equalTo: imageView.widthAnchor).isActive = true

Как видите, здесь я установил для свойства distribution представления стека значение .fill, поэтому, поскольку ширина вашего изображения ограничена до 17, ваше текстовое поле width будет регулироваться, чтобы заполнить ширину представления стека. Вы можете настроить это свойство и свойство spacing в зависимости от того, какое поведение вы ищете.

...