Как вызывать функции CustomDelegate Textfield принимает новый размер - PullRequest
0 голосов
/ 05 июня 2018

Я хочу создать пользовательский UITextfield, и у меня есть эта проблема.

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

Чтобы быть более конкретным, мой код:

private func setUpBottomRightLabel(){
    let height:CGFloat = self.layer.frame.height / 2
    let lBottomRight = UILabel(frame: CGRect(x: self.frame.origin.x, y: self.frame.origin.y + self.frame.height + 2, width: self.frame.width * 0.6, height: height))
    lBottomRight.font = UIFont(name: "System", size: 4)
    lBottomRight.text = "\(self.text?.count ?? 0)/\(self.maxNumber)"
    lBottomRight.textAlignment = .right
    lBottomRight.backgroundColor = UIColor.red
    self.superview!.addSubview(lBottomRight)
    self.updateConstraints()
    self.layoutIfNeeded()
}

И проблема в том, что когда эта функция вызывается из awakeFromNib() или init() текстового поля self.frame.width = 359, но когда ViewControllersfunction ViewDidAppear называется CustomTextField.frame.width is 304.0.

Метод делегата Witch, если я вызову файл из CustomTextField, чтобы вызвать методы, которые добавляют метки к текстовому полю, которые будут иметь размер, основанный на телефоне.?

1 Ответ

0 голосов
/ 05 июня 2018

В вашем CustomTextField, override layoutSubviews, как показано ниже, чтобы получить правильный frame, а затем добавьте нижнюю метку

class CustomTextField: UITextField {

    override func layoutSubviews() {
        print("\(self.frame)")
    }
}
...