【问题标题】:Closures outside viewDidLoadviewDidLoad 之外的闭包
【发布时间】:2017-09-10 05:39:01
【问题描述】:

我想创建一个没有 Storyboard 的简单应用。我在viewDidLoad 方法之外创建了一个闭包,它代表屏幕上的标题。我的问题是代码包含重复的行 view.addSubview(label) 并将标签放置在错误的位置。

你能帮我解决这个问题吗?

class HomeVC: UIViewController {
    let titleLabel: UILabel = {
        let view = UIView()
        let label = UILabel()
        label.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(label)
        label.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        label.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        label.text = "Hello"
        return label
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(titleLabel)
    }
}

【问题讨论】:

    标签: ios swift uiview closures nslayoutconstraint


    【解决方案1】:

    我认为您想将标签设置在 HomeVC 视图的中心,上面代码中的问题是您正在创建一个新视图并将标签放置在视图内,这不是您想要的,所以

    你只需像这样先制作标签:

    let titleLabel: UILabel = {
    
                let label = UILabel()
                label.translatesAutoresizingMaskIntoConstraints = false
    
                label.text = "Hello"
                return label
            }()
    

    然后在viewDidLoad 中将此标签添加为视图的子视图并应用约束

    override func viewDidLoad() {
        super.viewDidLoad()
            view.addSubview(titleLabel)
            setupTitleLabel()
    }
    
    func setupTitleLabel() {
            titleLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
            titleLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
            //you also need to give the label height and width constraints to label here...
    }
    

    【讨论】:

    • 感谢您的回答。它有效,我只是想在 viewDidLoad 中添加最少的代码。
    猜你喜欢
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 2014-10-31
    • 1970-01-01
    相关资源
    最近更新 更多