以编程方式在标题中设置2标签 - 不是标签

时间:2017-09-26 14:56:38

标签: swift swift3

我试图设置2个标签,一个在标题下具有不同字体大小的标签。该函数调用如下:

viewController.navigationItem.titleView = self.setHeader()

负责生成标签的代码是:

private func setHeader(agentName: String = "", isTyping: Bool = false) -> UIView {
    let headerLabel: UILabel = {
        let label = UILabel()
        label.text = self.title
        label.font = UIFont.systemFont(ofSize: 21)
        label.textColor = UIColor.white
        return label
    }()

    let subheaderLabel: UILabel = {
        let label = UILabel()
        label.font = UIFont.systemFont(ofSize: 10)
        return label
    }()

    let headerView: UIView = {
        let view = UIView()
        view.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(headerLabel)
        view.addConstraints([
                NSLayoutConstraint(item: headerLabel, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 1.0, constant: 0),
                NSLayoutConstraint(item: headerLabel, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1.0, constant: 0),
                NSLayoutConstraint(item: headerLabel, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 16),
                NSLayoutConstraint(item: headerLabel, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 16)
                ])



        return view
    }()



    if (!agentName.isEmpty) {
        if (isTyping) {
            subheaderLabel.text = agentName + " is typing ..."
        } else {
            subheaderLabel.text = agentName
        }
        headerView.addSubview(subheaderLabel)
    }

    return headerView
}

当我运行IOS应用程序时,标题中没有显示任何内容。是什么原因?

1 个答案:

答案 0 :(得分:0)

我认为您需要为headerView设置框架。因此,在headerView的初始化代码中,请使用frame初始化程序:

let headerView: UIView = {
    // initialize the view with frame
    let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 35))
    // you want to call this on the headerLabel, not on view
    headerLabel.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(headerLabel)
    view.addConstraints([
                NSLayoutConstraint(item: headerLabel, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 1.0, constant: 0),
                NSLayoutConstraint(item: headerLabel, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1.0, constant: 0),
                NSLayoutConstraint(item: headerLabel, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 16),
                NSLayoutConstraint(item: headerLabel, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 16)
            ])
        return view
    }()

此外,我相信您要headerLabel translatesAutoresizingMaskIntoConstraints而不是headerLabel headerViewheaderView是通过框架而不是Autolayout设置的subheaderLabel

另外,请注意您将subheaderLabel添加到视图中,但是您从未定位它,也不要忘记它(尽管这只会导致Set @query = 'SELECT * FROM Items WHERE Strength IN ('+@cblStrength+')'; EXEC sp_executesql @query; 无法正确呈现)