首页 > 解决方案 > ViewController 不显示视图

问题描述

将 UILabel 添加到我的 ViewController 时,它显示正常,但是一旦我使用单独的 UIView,控制器什么也不显示。ViewController 是从 TableViewController.didSelectRowAt 推送的

在 didSelectRowAt 中调用 ViewController

let labelViewController = TempViewController()                
navigationController?.pushViewController(labelViewController, animated: true)

场景 1:仅 ViewController - 显示蓝屏,文本在屏幕的 y 中心,如预期的那样

class TempViewController: UIViewController {
    var tempView: UILabel = {
        let label = UILabel()
        label.text = "Please enter your email address"
        label.translatesAutoresizingMaskIntoConstraints = false
        label.backgroundColor = UIColor.blue
        return label
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.red
        navigationItem.title = "Temp"
        edgesForExtendedLayout = []

        view.addSubview(tempView)
        tempView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        tempView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        tempView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        tempView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    }

场景 2:ViewController 和 View - 显示没有文字和蓝色的红屏

class TempViewController: UIViewController {

    var tempView = TempView()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.red
        navigationItem.title = "Temp"
        edgesForExtendedLayout = []

        view.addSubview(tempView)
        tempView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        tempView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        tempView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        tempView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    }
}
class TempView: UIView {
    var tempView: UILabel = {
        let label = UILabel()
        label.text = "Please enter your email address"
        label.translatesAutoresizingMaskIntoConstraints = false
        label.backgroundColor = UIColor.blue
        return label
    }()

    override init(frame: CGRect) {
        super.init(frame: frame)
        setView()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setView()
    }

    private func setView() {
        addSubviews()
        setLayout()
    }

    private func addSubviews() {
        addSubview(tempView)
    }

    private func setLayout() {
                tempView.topAnchor.constraint(equalTo: topAnchor).isActive = true
                tempView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
                tempView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
                tempView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
    }
}

我希望这两种情况都会产生相同的结果?但是场景 2 不显示视图?

谢谢你的帮助

标签: swiftuiview

解决方案


您的视图未显示,因为它受到过度约束。

您还需要设置translatesAutoresizingMaskIntoConstraints = false为:tempViewviewDidLoad()

view.addSubview(tempView)
tempView.translatesAutoresizingMaskIntoConstraints = false
tempView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
tempView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
tempView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
tempView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

推荐阅读