具有相同设置但结果不同的两个堆栈视图

时间:2018-11-05 16:58:12

标签: ios swift uitableview nslayoutconstraint uistackview

我有两个自定义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
}

enter image description here enter image description here

我确实(显然足够)遇到了冲突:

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,我可以按照自己的方式进行布局,并避免布局错误。谁知道...

0 个答案:

没有答案