我UITableView
用一个函数定义了扩展,将默认视图放在 tableView 的顶部。由于某种原因,以下代码行无法按预期工作。
1)没有提供正确解决方案的代码
func addNoDataView() -> UIView {
let containerView = UIView(forAutoLayout: ())
self.addSubview(containerView)
containerView.backgroundColor = UIColor.black
containerView.autoPinEdge(.leading, to: .leading, of: self, withOffset: 8)
containerView.autoPinEdge(.trailing, to: .trailing, of: self, withOffset: 8)
containerView.autoPinEdge(.top, to: .top, of: self, withOffset: 40)
containerView.autoSetDimension(.height, toSize: 150)
return containerView
}
在这种情况下,预期的输出将是一个黑色视图,距 tableView 顶部 40 像素,带有前导和后边距。但是当我跑的时候,我什至看不到风景。
2)提供正确解决方案的代码
func addNoDataView() -> UIView {
let containerView = UIView(forAutoLayout: ())
containerView.backgroundColor = UIColor.black
self.addSubview(containerView)
containerView.autoPinEdge(.leading, to: .leading, of: self, withOffset: 8)
containerView.autoPinEdge(.trailing, to: .trailing, of: self, withOffset: self.frame.width - 8)
containerView.autoPinEdge(.top, to: .top, of: self, withOffset: 40)
containerView.autoSetDimension(.height, toSize: 150)
return containerView
}
在这种情况下,我得到了预期的解决方案。即从顶部开始的黑色视图 40 和 8 作为来自 tableView 的尾部和前沿的边距,高度为 150。
我还有一个功能几乎与上述相同,但差异非常小(我认为)。
func addNoDataLabelToTableView() -> UILabel {
let label = UILabel(forAutoLayout: ())
self.addSubview(label)
label.textColor = UIColor.darkGray
label.textAlignment = .center
label.text = "No Data Available"
label.autoPinEdge(.trailing, to: .trailing, of: self, withOffset: 8)
label.autoPinEdge(.leading, to: .leading, of: self, withOffset: 8)
label.autoSetDimension(.height, toSize: 20)
label.autoCenterInSuperview()
return label
}
此函数在 tableView 的中心添加一个标签,并按预期完美运行。
tableView 在所有 4 个边上都固定到它的 superview 边缘。没有问题。
但是,我无法理解为什么案例 1 不起作用。有人可以解释这两行之间的区别吗?
1)containerView.autoPinEdge(.trailing, to: .trailing, of: self, withOffset: 8)
这不起作用
2)containerView.autoPinEdge(.trailing, to: .trailing, of: self, withOffset: self.frame.width - 8)
这确实令人惊讶。