swift - 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 不显示视图?
谢谢你的帮助
解决方案
您的视图未显示,因为它受到过度约束。
您还需要设置translatesAutoresizingMaskIntoConstraints = false
为:tempView
viewDidLoad()
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
推荐阅读
- ruby - Net::HTTPForbidden 403 禁止
- dynamics-crm - MS Dynamics CRM 中的时间线是什么?
- javascript - console.time 显示运行相同功能的不同时间
- unity3d - unity3D 时间轴和电影机
- azure - Elk Logstash 无法连接到事件中心 Azure
- c# - 按钮“后退”始终禁用
- php - 问题解决 在 PHP 7.2 上移动上传的文件错误 8 - UPLOAD_ERR_EXTENSION
- javascript - 可观察管道中的异常被抑制
- asp.net-core - 扩展 ResourceManagerStringLocalizer 功能
- php - 元查询 - 在一个查询中比较两个元值