以编程方式填充UIStackView

时间:2017-05-23 15:03:36

标签: swift3 uibutton uistackview

我在StoryBoard中设计了一个UIStackView,我添加了2个UI按钮,高度约束设置为70。 我的stackview设置为垂直填充,并在故事板上设置了一些约束以适应Controller的视图。

我已经从stackView和UI按钮添加了一个插座。 我试图在堆栈视图中以编程方式添加第三个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 个答案:

答案 0 :(得分:1)

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

尝试设置一些颜色:

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

如果您关心tintColor

,也可以将其创建为系统按钮
let Btn3 = UIButton(type: .system)

如果您使用init(frame:)创建按钮,则会显示一个自定义按钮,the tintColor documentation可以这样说:

  

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

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

let Btn3 = UIButton(frame: .zero)

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

  

遵循案例约定。类型和协议的名称是   UpperCamelCase。其他一切都是lowerCamelCase。

因此Btn3建议使用某种类型,而btn3loginButton则建议使用变量。请参阅Swift API设计指南中的“Follow case conventions”。