视图不显示和自动布局集中

时间:2020-04-21 10:02:49

标签: ios swift autolayout

我想以编程方式在视图控制器中添加视图并将其集中。我已将该视图作为子视图添加到父视图,并启用了自动布局,但未显示。

import UIKit

class ViewController: UIViewController {
    lazy var newView:UIView = {
        let view = UIView()
        view.backgroundColor = #colorLiteral(red: 0.4745098054, green: 0.8392156959, blue: 0.9764705896, alpha: 1)
        view.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
        return view
    }()


    let titleLable = UILabel()
    let bodyLabel = UILabel()
    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(newView)
        newView.translatesAutoresizingMaskIntoConstraints = false


        newView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        newView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true



    }


}

3 个答案:

答案 0 :(得分:2)

尝试这种方式

NSLayoutConstraint(item: newView,
                   attribute: NSLayoutConstraint.Attribute.centerX,
                   relatedBy: NSLayoutConstraint.Relation.equal,
                   toItem: view,
                   attribute: NSLayoutConstraint.Attribute.centerX,
                   multiplier: 1,
                   constant: 0).isActive = true

NSLayoutConstraint(item: newView,
                   attribute: NSLayoutConstraint.Attribute.centerY,
                   relatedBy: NSLayoutConstraint.Relation.equal,
                   toItem: view,
                   attribute: NSLayoutConstraint.Attribute.centerY,
                   multiplier: 1,
                   constant: 0).isActive = true

答案 1 :(得分:1)

newView缺少大小限制。您使用newView.translatesAutoresizingMaskIntoConstraints = false删除了它们。要恢复所有必需的约束,请将以下行添加到viewDidLoad

newView.widthAnchor.constraint(equalToConstant: 200).isActive = true
newView.heightAnchor.constraint(equalToConstant: 200).isActive = true

答案 2 :(得分:1)

这是问题所在... 首先,您设置newView的框架, 其次,您还设置了translatesAutoresizingMaskIntoConstraints = false 因此Xcode无法理解您要设置框架或约束的内容。 因此,如果您设置框架,那么以后就无法在其上再次添加约束。

因此,根据您的需要,最好的解决方案是:

view.addSubview(newView)
newView.translatesAutoresizingMaskIntoConstraints = false

newView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
newView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
newView.widthAnchor.constraint(equalToConstant: 200).isActive = true
newView.heightAnchor.constraint(equalToConstant: 200).isActive = true
相关问题