(Swift3/iOS10)Положите две (бок о бок) кнопки в правой части наложения на UITextField
Я пытаюсь поставить две кнопки (сохранить/отменить) внутри UITextField
, используя rightView
свойства. Мой основной код установки (вызывается из viewDidLoad
) выглядит следующим образом:
private func accesorizeRenameField() {
let saveButton = UIButton(type: .system)
saveButton.setImage(#imageLiteral(resourceName: "buttonCheckmark"), for: .normal)
saveButton.addTarget(self, action: #selector(renameSave), for: .touchUpInside)
saveButton.tintColor = UIColor(white: 0.15, alpha: 1)
let cancelButton = UIButton(type: .system)
cancelButton.setImage(#imageLiteral(resourceName: "buttonX"), for: .normal)
cancelButton.addTarget(self, action: #selector(renameCancel), for: .touchUpInside)
cancelButton.tintColor = UIColor(227, 34, 60, 1)
let container = UIView()
container.addSubview(saveButton)
container.addSubview(cancelButton)
container.translatesAutoresizingMaskIntoConstraints = false
container.backgroundColor = UIColor.cyan
saveButton.centerYAnchor.constraint(equalTo: container.centerYAnchor).isActive = true
cancelButton.centerYAnchor.constraint(equalTo: container.centerYAnchor).isActive = true
saveButton.heightAnchor.constraint(equalTo: container.heightAnchor).isActive = true
cancelButton.heightAnchor.constraint(equalTo: container.heightAnchor).isActive = true
saveButton.leadingAnchor.constraint(equalTo: container.leadingAnchor).isActive = true
saveButton.trailingAnchor.constraint(equalTo: container.centerXAnchor).isActive = true
cancelButton.leadingAnchor.constraint(equalTo: container.centerXAnchor).isActive = true
cancelButton.trailingAnchor.constraint(equalTo: container.trailingAnchor).isActive = true
self.renameField.rightView = container
self.renameField.rightViewMode = .always
}
Позже, когда я разоблачить поле переименования через некоторые анимации, я называю
self.renameField.rightView?.bounds = CGRect(x: 0, y: 0, width: self.renameField.bounds.height * 2, height: self.renameField.bounds.height)
self.renameField.rightView?.setNeedsLayout()
"rightView.frame \(self.renameField.rightView?.frame)".print()
self.renameField.rightView?.subviews.enumerated().forEach() {index,child in
"child \(index) frame \(child.frame)".print()
}
Однако, я не могу получить кнопки на объявиться. Голубой фон (для отладки) появляется, но на самом деле квадрат (он должен быть прямоугольником 2: 1). print
показывает, что в подзонах есть рамы размера 0. Что такое правая/idiomatic Способ для этого? Я чувствую, что я просто бросаю молотки здесь ...
UIView и кнопки должны иметь свои переводыAutoresizingMaskIntoConstraints, установленные на false. Я бы экспериментировал и посмотрел, можно ли просто получить простой UIView с цветным фоном, чтобы показать (я, кажется, вспоминаю, что textField хочет, чтобы этот вид был квадратным и примерно 44x44, но не уверен). –