我有两个自定义tableView单元格;以左右布局设计的图片,左侧为图片,右侧为多行标签。另一个具有完全相同的功能,但标签在左侧,图像在右侧。在这两种情况下,图像和标签都包含在堆栈视图中,并且设置相同:Axis = Horizontal, Alignment = Center, Distribution = Fill Proportionally, Spacing = 10
。
这两个标签具有相同的布局约束。顶部/底部固定(用于调整单元格的大小)和width >= 100
。
在标签位于左侧的情况下,其宽度在运行时设置为零,并且文本不显示。有什么原因让我不清楚为什么两个对象的行为会有所不同。
更新:这是tableViewController的委托方法中的内容:
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return "Help: The Basics"
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
// MARK: - Table view data source
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let item = items[indexPath.row]
var cell: HelpTableViewCell? = nil
switch item.layoutType {
case .left:
cell = tableView.dequeueReusableCell(withIdentifier: "HelpDefaultCell") as! HelpDefaultTableViewCell
case .right:
cell = tableView.dequeueReusableCell(withIdentifier: "HelpAlternateCell") as! HelpAlternateTableViewcell
case .vertical:
cell = tableView.dequeueReusableCell(withIdentifier: "HelpVerticalCell") as! HelpVerticalTableViewcell
}
cell!.uiImage.image = item.image
if item.imageIsHidden {
cell!.uiImage.isHidden = true
}
if indexPath.row == 0 {
// this is the overview text -- no image!
let text = item.helpString
let formattedString = NSMutableAttributedString()
formattedString
.bold(text, size: 19.0)
cell!.helpTextLabel.attributedText = formattedString
} else {
cell!.helpTextLabel.text = item.helpString
}
return cell as! UITableViewCell
}
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return items.count
}
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
(view as! UITableViewHeaderFooterView).backgroundView?.backgroundColor = UIColor.lightGray
}
我确实(显然足够)遇到了冲突:
2018-11-05 09:32:01.284852-0800 xxx[7760:2416718] [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:0x2825fcf50 UILabel:0x14ddca540'Touch the xxx graphic t...'.width >= 100 (active)>",
"<NSLayoutConstraint:0x2825fce10 'fittingSizeHTarget' UILabel:0x14ddca540'Touch the xxx graphic t...'.width == 0 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x2825fcf50 UILabel:0x14ddca540'Touch the xxx graphic t...'.width >= 100 (active)>
我对此感到困惑,因为我没有任何.width == 0
约束。我想这些必须自动添加吗? (尽管有此错误,该特定单元格仍可以正确呈现。)
更新:通过选择Equal Centering
而不是Fill Proportionally
,我可以按照自己的方式进行布局,并避免布局错误。谁知道...