以编程方式填充 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
建议一个类型,而btn3
或loginButton
建议一个变量。请参阅 Swift API 设计指南中的“Follow case conventions”。
【讨论】:
绝对是一个愚蠢的错误!当然骆驼案也没有问题,我在输入示例代码时搞砸了。 不要对自己太苛刻,我想每个人都有他们公平的份额“呃!”时刻:)。对于这样的情况,我推荐 Xcode 的“Debug View Hierarchy”特性。另外,如果它解决了您的问题,请考虑接受这个作为答案。以上是关于以编程方式填充 UIStackView的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式填充 UITableView 以创建自定义下拉菜单
android以编程方式在radiogroup按钮之间添加填充