Swift3 以编程方式填充视图

Swift3 以编程方式填充视图,swift3,uibutton,uistackview,Swift3,Uibutton,Uistackview,我在故事板中设计了一个UIStackView,并添加了2个UIbutton,高度约束设置为70。 我的stackview设置为垂直填充,并且在情节提要上设置了一些约束以适应控制器的视图 我已经从stackView和UIbutton添加了一个插座。 我试图在堆栈视图中以编程方式添加第三个UIButton @IBOutlet weak var Btn1: UIButton! @IBOutlet weak var myStackView: UIStackView! var accounts = [

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

我已经从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从来不会出现

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

尝试设置一些颜色:

Btn3.backgroundColor = UIColor.yellow
Btn3.setTitleColor(UIColor.red, for: .normal)
如果您关心
tintColor
,也可以将其创建为系统按钮:

let Btn3 = UIButton(type: .system)
如果您使用
init(frame:)
创建一个按钮,您会得到一个自定义按钮,它的意思是:

此属性对于自定义类型的按钮没有默认效果。对于 自定义按钮,则必须实现与“着色颜色”相关的任何行为 你自己

另外,在使用
init(frame:)
初始化按钮时,我建议使用
.zero
,而不是指定一个无意义的帧(布局仍然由堆栈视图管理):

let Btn3 = UIButton(frame: .zero)
以及关于Swift命名约定的最后说明:

遵循案例惯例。类型和协议的名称是 大写。其他一切都比这低


因此,
Btn3
表示类型,而
Btn3
loginButton
表示变量。请参阅Swift API设计指南中的“”。

绝对是一个愚蠢的错误!当然,camel case没有问题,我在输入示例代码时弄糟了。不要对自己太苛刻,我想每个人都有自己的“duh!”时刻:)。对于这样的情况,顺便提一下,我推荐Xcode的“调试视图层次结构”特性。此外,请考虑接受这个答案,如果它解决了你的问题。