我正在尝试将我的UITableView创建为:
var myTableView: UITableView {
let tableView = UITableView()
tableView.translatesAutoresizingMaskIntoConstraints = false
tableView.backgroundColor = .brown
tableView.delegate = self
tableView.dataSource = self
return tableView
}
以及稍后在viewDidLoad
内部添加视觉约束,如:
view.addSubview(myTableView)
var c = [NSLayoutConstraint]()
c += NSLayoutConstraint.constraints(withVisualFormat: "H:|-[v0]-|", options: .alignAllCenterX, metrics: nil, views: ["v0": myTableView])
NSLayoutConstraint.activate(c)
但我在运行时收到错误:
Unable to parse constraint format:
Unable to interpret '|' character, because the related view doesn't have a superview
H:|-[v0]-|
我不明白为什么会这样,因为我在addSubview
之后添加约束,所以它应该找到superview,但它不能。
有人可以解释一下这个问题吗?
答案 0 :(得分:0)
这应该有效
var myTableView: UITableView = UITableView ()
override func viewDidLoad() {
super.viewDidLoad()
myTableView.translatesAutoresizingMaskIntoConstraints = false
myTableView.backgroundColor = .brown
myTableView.delegate = self
myTableView.dataSource = self
self.view.addSubview(myTableView)
constraintsWithFormat(format: "H:|[v0]|", views: myTableView)
constraintsWithFormat(format:"V:|[v0]|" , views: myTableView)
// Do any additional setup after loading the view.
}
func constraintsWithFormat(format:String , views:UIView...)
{
var viewsDic = [String: UIView]()
for (index , view ) in views.enumerated() {
let key = "v\(index)"
viewsDic[key] = view
view.translatesAutoresizingMaskIntoConstraints = false
}
let constraints = NSLayoutConstraint.constraints(withVisualFormat: format, options: [], metrics: nil, views: viewsDic)
NSLayoutConstraint.activate(constraints)
}
答案 1 :(得分:0)
由于您使用的是computed property,因此当您在#simulated data
set.seed(42)
x <- rt(1e4, 7, 10)
plot(density(x))
library(MASS)
fitted_parameters = fitdistr(x, "t", start = list(df = 10, m = 10, s = 5))
# df m s
# 3.81901649 10.56816146 2.66905346
#( 0.15295551) ( 0.03448627) ( 0.03361758)
mydt <- function(x, m, s, df) dt((x-m)/s, df)/s
curve(do.call(mydt, c(list(x), as.list(fitted_parameters$estimate))), add = TRUE, col = "red")
legend("topright", legend = c("kernel density estimate", "fitted t distribution"),
col = c("black", "red"), lty = 1)
中引用myTableView
时,将myTableView
作为子视图添加实际创建实例,而另一个实例他们没有指向同一个地方。
我看到你在你的属性中设置了UITableView的delegate和dataSource。为此,您需要使用lazy var。这允许您访问自己。
NSLayoutConstraint.constraints
我希望这会有所帮助。