折叠 Tableview 部分时出现约束错误
Getting constraint error while collapsing Tableview section
我有一个自定义单元格视图,其中包含嵌入在垂直堆栈视图中的图像和标签。
堆栈视图绑定到内容视图的 4 个边缘。
图像有 1:1 方面的限制。
展开和折叠操作似乎工作正常,但是当我继续点击时,我有时会看到一些警告,而且似乎是随机的。
2019-01-17 23:15:46.749683+0300 MyApp[10270:349316] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x6000032e54a0 UIStackView:0x7f9f97d19620.height == 43.5 (active)>",
"<NSLayoutConstraint:0x6000032e5590 V:[UIStackView:0x7f9f97d19620]-(5)-| (active, names: '|':UITableViewCellContentView:0x7f9f97d19430 )>",
"<NSLayoutConstraint:0x6000032e5630 V:|-(5)-[UIStackView:0x7f9f97d19620] (active, names: '|':UITableViewCellContentView:0x7f9f97d19430 )>",
"<NSLayoutConstraint:0x6000032e5f40 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7f9f97d19430.height == 499.5 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x6000032e54a0 UIStackView:0x7f9f97d19620.height == 43.5 (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
我运行expand/collapse的内容如下:
....
tableView.register(UINib(nibName: "InboxTableViewCell", bundle: nil), forCellReuseIdentifier: "inboxCell")
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 500
tableView.reloadData()
....
func numberOfSections(in tableView: UITableView) -> Int {
return tableViewData.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableViewData[section].opened == true {
return tableViewData[section].sectionData.count + 1
}else {
return 1
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "headerCell", for: indexPath) as! HeaderTableViewCell
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: "inboxCell", for: indexPath) as! InboxTableViewCell
return cell
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.row == 0{
if tableViewData[indexPath.section].opened == true {
tableViewData[indexPath.section].opened = false
let sections = IndexSet.init(integer: indexPath.section)
tableView.reloadSections(sections, with: .none)
}else{
tableViewData[indexPath.section].opened = true
let sections = IndexSet.init(integer: indexPath.section)
tableView.reloadSections(sections, with: .none)
}
}
}
将图像的 1:1 纵横比约束的优先级设置为 999 或更低。它强制自动布局为堆栈视图生成高度约束以维持纵横比。这对生意不利。
我有一个自定义单元格视图,其中包含嵌入在垂直堆栈视图中的图像和标签。
堆栈视图绑定到内容视图的 4 个边缘。
图像有 1:1 方面的限制。
展开和折叠操作似乎工作正常,但是当我继续点击时,我有时会看到一些警告,而且似乎是随机的。
2019-01-17 23:15:46.749683+0300 MyApp[10270:349316] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x6000032e54a0 UIStackView:0x7f9f97d19620.height == 43.5 (active)>",
"<NSLayoutConstraint:0x6000032e5590 V:[UIStackView:0x7f9f97d19620]-(5)-| (active, names: '|':UITableViewCellContentView:0x7f9f97d19430 )>",
"<NSLayoutConstraint:0x6000032e5630 V:|-(5)-[UIStackView:0x7f9f97d19620] (active, names: '|':UITableViewCellContentView:0x7f9f97d19430 )>",
"<NSLayoutConstraint:0x6000032e5f40 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7f9f97d19430.height == 499.5 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x6000032e54a0 UIStackView:0x7f9f97d19620.height == 43.5 (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
我运行expand/collapse的内容如下:
....
tableView.register(UINib(nibName: "InboxTableViewCell", bundle: nil), forCellReuseIdentifier: "inboxCell")
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 500
tableView.reloadData()
....
func numberOfSections(in tableView: UITableView) -> Int {
return tableViewData.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableViewData[section].opened == true {
return tableViewData[section].sectionData.count + 1
}else {
return 1
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "headerCell", for: indexPath) as! HeaderTableViewCell
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: "inboxCell", for: indexPath) as! InboxTableViewCell
return cell
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.row == 0{
if tableViewData[indexPath.section].opened == true {
tableViewData[indexPath.section].opened = false
let sections = IndexSet.init(integer: indexPath.section)
tableView.reloadSections(sections, with: .none)
}else{
tableViewData[indexPath.section].opened = true
let sections = IndexSet.init(integer: indexPath.section)
tableView.reloadSections(sections, with: .none)
}
}
}
将图像的 1:1 纵横比约束的优先级设置为 999 或更低。它强制自动布局为堆栈视图生成高度约束以维持纵横比。这对生意不利。