UITextField AdjusttsFontSizeToFitWidth не работает, если текст является одним словом - PullRequest
0 голосов
/ 08 ноября 2019

example example2

У меня есть UITextField, который находится в определенном представлении с ограничениями. Работает без нареканий, если в тексте нет ни одного слова. Но, как вы можете видеть на изображении выше, если текст состоит только из одного слова, он не регулирует размер шрифта, чтобы соответствовать. Как я могу это исправить? Вот мой код:

class ViewController: UIViewController {

    @IBOutlet weak var myView: UIView!

    lazy var textInput : UITextField = {
        let textInput = UITextField()
        textInput.textAlignment = .center
        textInput.translatesAutoresizingMaskIntoConstraints = false
        textInput.minimumFontSize = 10;
        textInput.adjustsFontSizeToFitWidth = true;
        textInput.backgroundColor = .yellow
        myView.addSubview(textInput)
        var lConst = NSLayoutConstraint(item: textInput, attribute: .leading, relatedBy: .equal, toItem: myView, attribute: .leading, multiplier: 1, constant: 0)
        var toConst = NSLayoutConstraint(item: textInput, attribute: .top, relatedBy: .equal, toItem: myView, attribute: .top, multiplier: 1, constant: 0)
        var trConst = NSLayoutConstraint(item: textInput, attribute: .trailing, relatedBy: .equal, toItem: myView, attribute: .trailing, multiplier: 1, constant: 0)
        var bConst = NSLayoutConstraint(item: textInput, attribute: .bottom, relatedBy: .equal, toItem: myView, attribute: .bottom, multiplier: 1, constant: 0)
        NSLayoutConstraint.activate([lConst,toConst,trConst,bConst])

        return textInput
    } ()


    override func viewDidLoad() {
        super.viewDidLoad()
        _ = textInput
        textInput.font = UIFont.boldSystemFont(ofSize: 200)
        // Do any additional setup after loading the view.
    }
}

1 Ответ

0 голосов
/ 09 ноября 2019

Если вы имеете в виду «символ» вместо «слово» (глядя на ваши изображения), я думаю, что ваша проблема в том, что по умолчанию первый символ в верхнем регистре. Если вы хотите, чтобы ваш текст начинался со строчной буквы, вы должны установить это:

textInput.autocapitalizationType = .none

Редактировать: Извините, я просто неверно истолковал ваши изображения и не увидел, что ваше письмо вырезано сверху и снизу.

Я написал ваш код с немного другим синтаксисом компоновки, и он отлично работает, даже если представление меньше размера шрифта.

class ViewController: UIViewController {

lazy var myView:UIView = {
    let view = UIView()
    view.translatesAutoresizingMaskIntoConstraints = false
    return view
}()

lazy var textInput : UITextField = {
    let textInput = UITextField()
    textInput.textAlignment = .center
    textInput.translatesAutoresizingMaskIntoConstraints = false
    textInput.minimumFontSize = 10;
    textInput.adjustsFontSizeToFitWidth = true;
    textInput.backgroundColor = .yellow
    return textInput
} ()


override func viewDidLoad() {
    super.viewDidLoad()
    setupLayout()
    // Do any additional setup after loading the view.
}

func setupLayout(){
    view.addSubview(myView)
    NSLayoutConstraint.activate([
        myView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
        myView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
        myView.widthAnchor.constraint(equalToConstant: 180),
        myView.heightAnchor.constraint(equalToConstant: 180)
    ])
    textInput.font = UIFont.boldSystemFont(ofSize: 200)
    myView.addSubview(textInput)
    NSLayoutConstraint.activate([
        textInput.topAnchor.constraint(equalTo:myView.topAnchor),
        textInput.trailingAnchor.constraint(equalTo: myView.trailingAnchor),
        textInput.bottomAnchor.constraint(equalTo: myView.bottomAnchor),
        textInput.leadingAnchor.constraint(equalTo: myView.leadingAnchor)
    ])
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...