如何在swift中使用for循环将按钮添加到stackview?

Posted

技术标签:

【中文标题】如何在swift中使用for循环将按钮添加到stackview?【英文标题】:How to add button to stackview using for loop in swift? 【发布时间】:2020-10-15 07:52:38 【问题描述】:

我使用 xib 创建了一个堆栈视图,并希望以编程方式向其中添加按钮。我试图创建按钮并 addArrangedSubview 到 stackview 但未显示按钮。 我的代码:

for item in 1...5 
   let button = UIButton()
    button.setTitle("Button \(item)", for: .normal)
    self?.stackView.addArrangedSubview(button)

【问题讨论】:

堆栈视图的属性是什么?每次都一样大小?因为您没有为按钮设置框架。 @Larme stackview 应该包含它需要的按钮,我尝试为按钮设置框架 let button = UIButton(frame: CGRect(x: 145, y: 32, width: 64, height: 64)) 但stackview中没有按钮 2 个问题,你的self 有没有可能变成nil?并为您的stackView 设置任何框架/约束。我刚刚将您的代码粘贴到游乐场并为stackView 设置了约束,它可以工作。 【参考方案1】:

从文档中,

堆栈视图的定位和大小

虽然堆栈视图允许您在不直接使用自动布局的情况下对其内容进行布局,但您仍然需要使用自动布局来定位堆栈视图本身。通常,这意味着固定堆栈视图的至少两个相邻边缘以定义其位置。

下面是一个工作示例。

import UIKit
import PlaygroundSupport

class MyViewController : UIViewController 
  override func loadView() 
    let view = UIView()
    view.backgroundColor = .white
    self.view = view

    let stackView = UIStackView()
    for item in 1...5 
      let button = UIButton()
      button.setTitle("Button \(item)", for: .normal)
      button.backgroundColor = .red
      stackView.addArrangedSubview(button)
    
    view.addSubview(stackView)

    stackView.translatesAutoresizingMaskIntoConstraints = false

    stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true

    stackView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    stackView.backgroundColor = .yellow
  

// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()
PlaygroundPage.current.needsIndefiniteExecution = true

【讨论】:

以上是关于如何在swift中使用for循环将按钮添加到stackview?的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 使用 for 循环将数据添加到核心数据

如何在 Swift 4 中以编程方式将 IBAction 添加到按钮?

如何在后台线程swift中运行for循环

如何在for循环中切换单击按钮的类?

Swift 2 - for 循环创建多个 UIButtons

如何延迟 For 循环直到声音在 Swift 中播放完毕