Swift -Как добавить изображение и текст в левом представлении UItextField и выровнять их вертикально вертикально - PullRequest
0 голосов
/ 17 февраля 2019

В настоящее время у меня есть изображение и 2 строки, которые я добавляю к кнопке, и я добавляю кнопку к пользовательскому интерфейсу, который добавляю в левую часть textField.Я беру изображение и 2 строки и создаю одну полную строку, сначала преобразовав изображение в NSTextAttachment, а затем добавив остальные 2 строки к его концу.

Это работает, но проблема в изображении (downArrow)слишком велик по сравнению с 2 строками, и кажется, что он расположен непосредственно в центре Y текстового поля, в то время как 2 строки располагаются по направлению к нижней нижней части текстового поля.

(красный фон просто для того, чтобы выделить вид, которыйЯ использую, что кнопка находится внутри)

enter image description here

Флаг 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...