【问题标题】:fill a UIStackView programmatically以编程方式填充 UIStackView
【发布时间】: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 从未出现

【问题讨论】:

    标签: swift3 uibutton uistackview


    【解决方案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”特性。另外,如果它解决了您的问题,请考虑接受这个作为答案。
    猜你喜欢
    • 2019-07-02
    • 2020-10-16
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多