Почему кнопка появляется только со второй попытки? - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь добавить функцию, которая будет отображать кнопку закрытия в моем пользовательском представлении предупреждений.Когда я звоню в первый раз, появляется только пустая область, в которой нет кнопки (без цвета, без текста и без нажатия).При повторном вызове - все работает как надо.

Это не зависит от параметра animated, в обоих случаях работает одинаково.

Мой dialogView - мой пользовательскийUIView.Я не использую UIAlertController

В чем может быть проблема?

начальный вид после первой попытки вторая попытка
Функция вызова GIF при нажатии

func showCloseButton(text: String, animated: Bool){
        let dialogViewHeight = self.dialogView.frame.height + 50 + 1

        let button = UIButton(type: .roundedRect)
        button.backgroundColor = .red
        button.frame.origin = CGPoint(x: 0, y: dialogViewHeight)
        button.frame.size = CGSize(width: self.dialogView.frame.width, height: 50)
        button.setTitle(text, for: .normal)
        button.addTarget(self, action: #selector(closeTapped), for: .touchUpInside)

        let separatorLineView = UIView()
        separatorLineView.frame.origin = CGPoint(x: 0, y: self.dialogView.frame.height)
        separatorLineView.frame.size = CGSize(width: dialogView.frame.width, height: 1)
        separatorLineView.backgroundColor = UIColor.groupTableViewBackground
        dialogView.addSubview(separatorLineView)

        if animated {
            animateAdjustDialogView(height: dialogViewHeight){
                Logger.Log("completion did")
                self.dialogView.addSubview(button)
            }
        } else {

            Logger.Log("button.frame.origin = \(button.frame.origin)")
            Logger.Log("button.frame.size = \(button.frame.size)")
            Logger.Log("button.title = \(button.titleLabel)")

            self.dialogView.frame.size = CGSize(width: self.dialogView.frame.width, height: dialogViewHeight)
            self.dialogView.addSubview(button)
        }
    }

private func animateAdjustDialogView(height: CGFloat, completion: (()->Void)?){
        UIView.animate(withDuration: 1.0, animations: {
            self.dialogView.frame.size = CGSize(width: self.dialogView.frame.width, height: height)
            self.layoutIfNeeded()
        }) { (finished) in
            Logger.Log("finished = \(finished)")
            if finished {
                Logger.Log("completion run")
                completion?()
            }
        }
    }

1 Ответ

1 голос
/ 25 марта 2019

Рамка кнопки вызывает проблему -

button.frame.origin = CGPoint(x: 0, y: dialogViewHeight)

Где

let dialogViewHeight = self.dialogView.frame.height + 50 + 1 

Это означает, что button выходит за пределы dialogView frame.

Поэтому замените

button.frame.origin = CGPoint(x: 0, y: dialogViewHeight)

на

button.frame.origin = CGPoint(x: 0, y: dialogViewHeight - 50) // Height of the Button.

Дайте мне знать, если вывсе еще возникают проблемы.

...