为什么按钮仅在第二次尝试时出现



我正在尝试添加一个函数,该函数将在自定义警报视图中显示关闭按钮。当我第一次调用它时,只出现一个不包含按钮的空白区域(没有颜色,没有文本,没有按下(。当您再次致电时 - 一切都按预期工作。

它不依赖于参数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?()
            }
        }
    }

按钮框架导致问题 -

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.

如果您仍然有任何问题,请告诉我。

最新更新