gpt4 book ai didi

ios - 如何为具有动态高度的表格单元格正确设置自动布局?

转载 作者:行者123 更新时间:2023-11-28 10:47:32 25 4
gpt4 key购买 nike

我尝试创建一个 UITableViewCell 并设置 subview 如下:

class MyCellView: UITableViewCell {

private let ImageView = UIImageView()
private let titleView = UILabel()

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {

super.init(style: style, reuseIdentifier: reuseIdentifier)

contentView.addSubview(ImageView)
contentView.addSubview(titleView)

ImageView.translatesAutoresizingMaskIntoConstraints = false
ImageView.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true
ImageView.leftAnchor.constraint(equalTo: contentView.leftAnchor).isActive = true
ImageView.rightAnchor.constraint(equalTo: contentView.rightAnchor).isActive = true
ImageView.heightAnchor.constraint(equalTo: contentView.widthAnchor, multiplier: 0.6).isActive = true

titleView.translatesAutoresizingMaskIntoConstraints = false
titleView.topAnchor.constraint(equalTo: ImageView.bottomAnchor).isActive = true
titleView.leftAnchor.constraint(equalTo: contentView.leftAnchor).isActive = true
titleView.rightAnchor.constraint(equalTo: contentView.rightAnchor).isActive = true
titleView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true

titleView.numberOfLines = 0

titleView.text = " " // <-- *** please note this line

}
}

在表格 View 中,我将其设置为使用动态高度:

tableView.estimatedRowHeight = 80
tableView.rowHeight = UITableViewAutomaticDimension

我的问题是,如果我不在单元格中设置 titleView 的文本,比如我在单元格 View 中标记最后一行:

// titleView.text = " "

我将从 XCode 中得到约束错误。但如果我设置文本,一切正常。

文本是从 Internet 动态下载的,因此文本可能为空。另外我可以把文本设置为“”,一个空格,我不知道我在这里有什么误解吗?如果我更正某些内容,文本可以为空(""或 nil)吗?

同样,如果我完全删除关于titleView 的代码,我只想在单元格中有一个UIImageView,我发现单元格的高度没有展开。如何设置它以便我可以在单元格中获得动态高度的图像?

编辑:约束错误:

2017-12-22 15:35:34.715865+0800 MyProject[15774:733515] [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:0x60c000095450 V:|-(0)-[UIImageView:0x7ff40df0de90] (active, names: '|':UITableViewCellContentView:0x7ff40df0edc0 )>",
"<NSLayoutConstraint:0x60c0000955e0 UIImageView:0x7ff40df0de90.height == 0.6*UITableViewCellContentView:0x7ff40df0edc0.width (active)>",
"<NSLayoutConstraint:0x60c000095630 V:[UIImageView:0x7ff40df0de90]-(0)-[UILabel:0x7ff40df0e0c0] (active)>",
"<NSLayoutConstraint:0x60c0000957c0 UILabel:0x7ff40df0e0c0.bottom == UITableViewCellContentView:0x7ff40df0edc0.bottom (active)>",
"<NSLayoutConstraint:0x60c000096210 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7ff40df0edc0.height == 248.333 (active)>",
"<NSLayoutConstraint:0x60c000095ea0 'UIView-Encapsulated-Layout-Width' UITableViewCellContentView:0x7ff40df0edc0.width == 414 (active)>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x60c000095630 V:[UIImageView:0x7ff40df0de90]-(0)-[UILabel:0x7ff40df0e0c0] (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

最佳答案

  • 如果你想避免警告,试试下面的代码

    class MyCellView: UITableViewCell {

    private let ImageView = UIImageView()
    private let titleView = UILabel()

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {

    super.init(style: style, reuseIdentifier: reuseIdentifier)

    contentView.addSubview(ImageView)
    contentView.addSubview(titleView)

    ImageView.translatesAutoresizingMaskIntoConstraints = false
    ImageView.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true
    ImageView.leftAnchor.constraint(equalTo: contentView.leftAnchor).isActive = true
    ImageView.rightAnchor.constraint(equalTo: contentView.rightAnchor).isActive = true
    let heightConstraint = ImageView.heightAnchor.constraint(equalTo: contentView.widthAnchor, multiplier: 0.6)
    heightConstraint.priority = UILayoutPriority.defaultLow
    heightConstraint.isActive = true

    titleView.translatesAutoresizingMaskIntoConstraints = false
    titleView.topAnchor.constraint(equalTo: ImageView.bottomAnchor).isActive = true
    titleView.leftAnchor.constraint(equalTo: contentView.leftAnchor).isActive = true
    titleView.rightAnchor.constraint(equalTo: contentView.rightAnchor).isActive = true
    titleView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true

    titleView.numberOfLines = 0

    // titleView.text = " "
    }
    }
  • 如果您完全删除有关 titleView 的代码,并希望在单元格中有一个具有动态高度的 UIImageView,请添加 bottomAnchor imageView

    的约束
    class MyCellView: UITableViewCell {

    private let ImageView = UIImageView()
    private let titleView = UILabel()

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {

    super.init(style: style, reuseIdentifier: reuseIdentifier)

    contentView.addSubview(ImageView)
    contentView.addSubview(titleView)

    ImageView.translatesAutoresizingMaskIntoConstraints = false
    ImageView.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true
    ImageView.leftAnchor.constraint(equalTo: contentView.leftAnchor).isActive = true
    ImageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true
    ImageView.rightAnchor.constraint(equalTo: contentView.rightAnchor).isActive = true
    let heightConstraint = ImageView.heightAnchor.constraint(equalTo: contentView.widthAnchor, multiplier: 0.6)
    heightConstraint.priority = UILayoutPriority.defaultLow
    heightConstraint.isActive = true
    }
    }

关于ios - 如何为具有动态高度的表格单元格正确设置自动布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47937496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com