以编程方式填充 UIStackView

Posted

技术标签:

【中文标题】以编程方式填充 UIStackView【英文标题】:fill a UIStackView programmatically 【发布时间】:2017-05-23 15:03:35 【问题描述】:

我在 StoryBoard 中设计了一个 UIStackView,并添加了 2 个高度约束设置为 70 的 UIbutton。 我的堆栈视图设置为垂直填充,并在情节提要上设置了一些约束以适应控制器的视图。

我已经从 stackView 和 UIbutton 添加了一个出口。 我正在尝试以编程方式在堆栈视图中添加第三个 UIButton

@IBOutlet weak var Btn1: UIButton!

@IBOutlet weak var myStackView: UIStackView!

var accounts = [Account]()

override func viewDidLoad() 
    super.viewDidLoad()
    Btn1.setTitle("Name", for: .normal)

    let Btn3 = UIButton(frame: CGRect(x: 0, y: 110, width: 100, height: 50))
    Btn3.setTitle("Btn3", for: .normal)
    Btn3.heightAnchor.constraint(equalToConstant: 70).isActive = true
    myStackView.addArrangedSubview(Btn3)

但 Btn3 从未出现

【问题讨论】:

【参考方案1】:

好吧,假设您的背景颜色是默认白色,按钮就在那里,很难看到;)。换句话说:它的标题颜色是白色。

尝试设置一些颜色:

Btn3.backgroundColor = UIColor.yellow
Btn3.setTitleColor(UIColor.red, for: .normal)

如果您关心tintColor,也可以将其创建为系统按钮:

let Btn3 = UIButton(type: .system)

如果您使用init(frame:) 创建一个按钮,您将获得一个自定义按钮,the tintColor documentation 会这样说:

此属性对自定义类型的按钮没有默认效果。为了 自定义按钮,您必须实现与 tintColor 相关的任何行为 自己。

另外,在使用init(frame:) 初始化按钮时,我建议使用.zero

let Btn3 = UIButton(frame: .zero)

关于 Swift 命名约定的最后一点说明:

遵循大小写约定。类型和协议的名称是 大写驼峰式。其他的都是lowerCamelCase。

所以Btn3 建议一个类型,而btn3loginButton 建议一个变量。请参阅 Swift API 设计指南中的“Follow case conventions”。

【讨论】:

绝对是一个愚蠢的错误!当然骆驼案也没有问题,我在输入示例代码时搞砸了。 不要对自己太苛刻,我想每个人都有他们公平的份额“呃!”时刻:)。对于这样的情况,我推荐 Xcode 的“Debug View Hierarchy”特性。另外,如果它解决了您的问题,请考虑接受这个作为答案。

以上是关于以编程方式填充 UIStackView的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式填充 UITableView 以创建自定义下拉菜单

如何以编程方式填充核心数据存储,为每条记录生成索引

android以编程方式在radiogroup按钮之间添加填充

是否可以在 android 中以编程方式创建和填充 AutoCompleteTextView?

以编程方式填充分配给对象的属性集定义中的数据

以编程方式填充组合框 dojo (1.8) 的最佳方法是啥?