В настоящее время у меня есть изображение и 2 строки, которые я добавляю к кнопке, и я добавляю кнопку к пользовательскому интерфейсу, который добавляю в левую часть textField.Я беру изображение и 2 строки и создаю одну полную строку, сначала преобразовав изображение в NSTextAttachment, а затем добавив остальные 2 строки к его концу.
Это работает, но проблема в изображении (downArrow)слишком велик по сравнению с 2 строками, и кажется, что он расположен непосредственно в центре Y текстового поля, в то время как 2 строки располагаются по направлению к нижней нижней части текстового поля.
(красный фон просто для того, чтобы выделить вид, которыйЯ использую, что кнопка находится внутри)
Флаг Emoji представляет собой строку , а не изображение
Я подумал, что, возможно, лучший способ исправить это - сначала установить изображение downArrow с левой стороны textField, а затем добавить 2 строки к кнопке и поместить кнопку с левой стороны стрелки вниз.Единственная проблема в том, что в конечном итоге я хочу, чтобы paddingView, в котором находится кнопка, был точной шириной всех 3 строк, чтобы ширина не имела всего пустого пространства в начале и в конце красного представления.
Просто для ясности, я хочу сделать так, чтобы стрелка вниз и две строки располагались вертикально на одной строке.В зависимости от результата этого я спрошу, как получить ширину всех 3 в другом вопросе.
Я попытался установить кнопку contentVerticalAlignment = .center
, но это не имело никакого значения.
// button
var flagButton = UIButton()
flagButton.contentHorizontalAlignment = .fill
flagButton.contentVerticalAlignment = .center // I tried .fill too
flagButton.imageView?.contentMode = .scaleAspectFit // I tried .scaleAspectFill too
flagButton.setContentHuggingPriority(UILayoutPriority.defaultLow, for: .horizontal)
// downArrow, emoji flag, and dialing code that will get displayed inside the button
let emojiFlag = // emoji flag from string
let dialingCode = // country dialing code is a String
let flagAndDialingCode = "\(emojiFlag) \(dialingCode)"
let fullString = NSMutableAttributedString(string: " ", attributes: [NSAttributedString.Key.font : UIFont.systemFont(ofSize: 20)])
let image1Attachment = NSTextAttachment()
image1Attachment.image = UIImage(named: "downArrow")
let image1String = NSAttributedString(attachment: image1Attachment)
fullString.append(image1String)
fullString.append(NSAttributedString(string: flagAndDialingCode))
flagButton.setAttributedTitle(fullString, for: .normal)
// button will go on the left side of this textField
phoneNumberTextField.layoutIfNeeded()
let height = phoneNumberTextField.frame.size.height
let width: CGFloat = 100 // this width should actually be the width of the image and 2 strings together
let frame = CGRect(x: 0, y: 0, width: width, height: height)
flagButton.frame = frame
let paddingView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: width, height: height))
paddingView.backgroundColor = .red
paddingView.addSubview(flagButton)
phoneNumberTextField.leftViewMode = .always
phoneNumberTextField.leftView = paddingView