无法取消隐藏按钮,除了 ViewDidLayoutSubviews()

Cannot unhide a button except in ViewDidLayoutSubviews()

我有一个 UIButton 应该只是偶尔出现。在 viewDidLayoutSubviews 我做了以下事情:

 override func viewDidLayoutSubviews() {
    super.viewWillLayoutSubviews()
    clearButtonOutlet.hidden = true

但是,当我在其他地方尝试clearButtonOutlet.hidden = false时,按钮不会重新出现。

起初我以为我的约束可能搞砸了,但这使按钮重新出现:

override func viewDidLayoutSubviews() {
    super.viewWillLayoutSubviews()
    clearButtonOutlet.hidden = true
    clearButtonOutlet.hidden = false

为什么我不能让按钮重新出现在其他地方?

编辑 1:我试图让按钮重新出现的地方:

func textFieldDidBeginEditing(textField: UITextField) {

    //some stuff
    switch textField.tag {

        //tag = 3 is the when I want the clear button to show
    case 3:
        //launch the date picker
        launchDatePicker(textField)

        //once DatePicker is launched, show the clear button
        clearButtonOutlet.hidden = false
    default: break
    }

仅将其设置为隐藏并不能解决所有问题,您需要重新绘制视图。当您创建不在 viewDidLayout 中的按钮时,我会设置 clearButton.hidden = true ,或者当视图再次布局时它将始终隐藏(在 iPad 或横向方向上调整大小)。然后在你的 textFieldDidBeginEditing 方法中我会像你一样设置 clearButton.hidden = false 然后调用 view.setNeedsLayout() 强制它重新布局和绘制。