以编程方式将按钮添加到Swift中的stackView

问题描述 投票:-3回答:3

我试图在我使用界面生成器构建的UIStackView中动态/以编程方式添加按钮,但是当我运行该应用程序时,它们无法显示。应该添加的按钮数通常为4-6。你们能告诉我代码有什么问题吗

5 buttons4 buttonscode

ios swift uistackview
3个回答
0
投票

我认为您需要再执行几个步骤,按钮才会开始显示。

  1. 将堆栈视图添加到当前视图的子视图中

    view.addSubview(buttonStackView)
    
  2. 现在每个视图按钮以及stackView都需要将translatesAutoresizingMaskIntoConstraints设置为false。

    button1.translatesAutoresizingMaskIntoConstraints = false
    button2.translatesAutoresizingMaskIntoConstraints = false
    buttonStackView.translatesAutoresizingMaskIntoConstraints = false
    
  3. 现在设置stackView约束

    NSLayoutConstraint.activate([
        buttonStackView.topAnchor.constraint(equalTo: view.topAnchor),
        buttonStackView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        buttonStackView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
        buttonStackView.trailingAnchor.constraint(equalTo: view.trailingAnchor)])
    
  4. 您将需要提供约束,或者可以覆盖stackView的固有大小。

     override func intrinsicContentSize() -> CGSize
     {
       return CGSizeMake(200, 40)
     }
    

由于UILabel具有固有大小,因此将显示按钮,如果没有,则必须设置约束以确保安全。


0
投票

@@ Nowonder我只是重新创建您想要实现的目标。以下是步骤。

  1. UIStackView在viewController中添加Interface Builder并添加所需的约束。
  2. 添加以下代码。

    override func viewDidLoad() {
       super.viewDidLoad()
    
       let button = UIButton()
       button.setTitle("btn 1", for: .normal)
       button.backgroundColor = UIColor.red
       button.translatesAutoresizingMaskIntoConstraints = false
    
       let button2 = UIButton()
       button2.setTitle("btn 2", for: .normal)
       button2.backgroundColor = UIColor.gray
       button2.translatesAutoresizingMaskIntoConstraints = false
    
       let button3 = UIButton()
       button3.setTitle("btn 3", for: .normal)
       button3.backgroundColor = UIColor.brown
       button3.translatesAutoresizingMaskIntoConstraints = false
    
       buttonStackView.alignment = .fill
       buttonStackView.distribution = .fillEqually
       buttonStackView.spacing = 8.0
    
       buttonStackView.addArrangedSubview(button)
       buttonStackView.addArrangedSubview(button2)
       buttonStackView.addArrangedSubview(button3)  
    
    }
    

以下是结果。enter image description here

希望有帮助。


-1
投票

解决!

[当我使用实例方法init(type :)设置按钮的类型时,该按钮出现了

© www.soinside.com 2019 - 2024. All rights reserved.