【问题标题】:Adding a button to a stackview via code通过代码将按钮添加到堆栈视图
【发布时间】:2016-03-10 18:32:25
【问题描述】:

我正在尝试将按钮添加回堆栈视图,但我不确定如何在代码中执行此操作,我只希望按钮出现在某种情况下,这就是我在代码中执行此操作的原因,这就是我所拥有的

我正在删除它

func hideCompareButton() {
    UIView.animateWithDuration(0.4, animations: {
        self.compareButton.alpha = 0
        }) { completed in
            if completed == true {
                self.compareButton.removeFromSuperview()
            }
    }
}

我有这个通常可以与其他视图一起使用,但我不确定如何将按钮添加到堆栈视图中,在首选位置,未添加时有 3 个按钮,添加时有 4 个,并且我喜欢它是左起第三个按钮

func showCompareButton() {
    // bottomStackView.addArrangedSubview(compareButton) ???
    bottomStackView.addSubview(compareButton)

    let bottomConstraint = compareButton.bottomAnchor.constraintEqualToAnchor(view.bottomAnchor)
    let leftConstraint = compareButton.leftAnchor.constraintEqualToAnchor(filterButton.rightAnchor)
    let rightConstraint = compareButton.rightAnchor.constraintEqualToAnchor(shareButton.leftAnchor)

    let heightConstraint = compareButton.heightAnchor.constraintEqualToConstant(44)

    NSLayoutConstraint.activateConstraints([bottomConstraint, leftConstraint, rightConstraint, heightConstraint])

    bottomStackView.layoutIfNeeded()
}

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    为什么不用所有按钮按照您想要的方式构建堆栈视图,然后简单地隐藏第三个按钮。当你想要它取消隐藏它。堆栈视图将完成所有其余的工作。这里有一些堆栈视图代码可以帮助您。这构建了一个小键盘,但原理相同,它添加了所有按钮,然后使其可见。

    这里有一些堆栈视图代码可以帮助您进行操作。

        keyPadWindow = UIView(frame: CGRect(x: 128, y: 224, width: 512, height: 356))
        var keyCount = 0
        keyPadSV = UIStackView(frame: CGRect(x: 0, y: 0, width: 512, height: 356))
        print("pickerWindow.bounds \(pickerWindow.bounds)")
        keyPadSV!.axis = .Vertical
        keyPadSV!.spacing = 0.0
        keyPadSV!.alignment = .Center
        keyPadSV!.distribution = .EqualSpacing
        for var k2s = 0; k2s < 5; k2s++ {
            let keyPadSVB = UIStackView(frame:CGRect(x: 0, y: 0, width: 0, height: 0))
            keyPadSVB.axis = .Horizontal
            keyPadSVB.spacing = 0.0
            keyPadSVB.alignment = .Center
            keyPadSVB.distribution = .EqualSpacing
            for var k4s = 0; k4s < 4; k4s++ {
                let button   = UIButton(type: UIButtonType.Custom) as UIButton
                button.frame = CGRectMake(0, 0, 0, 0)
                button.tag =  keyCount
                let blah = "x" + String(keyCount)
                let blahIMAGE = UIImage(named: blah)
                button.setImage(blahIMAGE, forState: UIControlState.Normal)
    
                print("blah \(blah)")
                button.addTarget(self, action: "keyPadPress:", forControlEvents: UIControlEvents.TouchUpInside)
                keyPadSVB.addArrangedSubview(button)
                keyCount++
            }
            keyPadSV.addArrangedSubview(keyPadSVB)
        }
        keyPadWindow.addSubview(keyPadSV)
        self.view.addSubview(keyPadWindow)
    }
    

    【讨论】:

      【解决方案2】:

      不要添加任何约束!这正是堆栈视图的工作。只需将按钮设置为堆栈视图的排列视图并 stop

      如果问题在于按钮要插入到现有排列视图的中间,那么,这就是insertArrangedSubview:atIndex: 的用途。见IOS stackview addArrangedSubview add at specific index

      【讨论】:

      • 为什么不用所有按钮按照您想要的方式构建堆栈视图,然后简单地隐藏第三个按钮。当你想要它取消隐藏它。堆栈视图将完成所有其余工作。
      • 嘿@user3069232 这是一个很好的答案,你应该把它作为答案。我会投赞成票!
      • 谢谢马特,很高兴有一些改变的鼓励!这是一个很棒的网站,尽管我担心可能需要十年或更长时间才能达到您的水平:)
      • insertArrangedSubview:atIndex 效果很好,虽然它放入了一个空白按钮,我无法在没有文本的情况下单击,但我不知道如何添加约束,我确实有 @IBOutlet var shareButton: UIButton !已连接,但它只是空白
      • 好吧,您的代码没有显示compareButton 的来源或维护的位置。但我向你保证,如果你有一个合适的按钮,这将起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 2023-01-01
      相关资源
      最近更新 更多