UITableViewCell contentView中的AutoLayout

时间:2018-06-25 10:23:04

标签: ios swift autolayout uikit constraints

我正在尝试以编程方式创建约束,以将这个粉红色的UIView放在UITableViewCell中。但是,当我添加约束时,它们不适用,并且在控制台中收到一条消息,提示某些NSAutoresizingMaskLayoutConstraints无法同时满足。

因此,当我设置cell.contentView.translatesAutoresizingMaskIntoConstraints = false时,会在控制台中收到此消息:

  

“不支持更改UITableViewCell的contentView的translatesAutoresizingMaskIntoConstraints属性,这将导致未定义的行为,因为此属性由拥有的UITableViewCell管理。”

视图确实居中,但是控制台说我不应该更改此属性。

我该如何实现?

Before setting the property to false

After setting the property to false

非常感谢您。

2 个答案:

答案 0 :(得分:1)

UITableViewCellUICollectionViewCell手动管理其contentView。换句话说,UIKit依赖于单元格的contentView,其translatesAutoresizingMaskIntoConstraints为True,因此不支持更改UITableViewCell的contentView的translatesAutoresizingMaskIntoConstraints属性,这将导致未定义行为。

不要这样做:

cell.contentView.translatesAutoresizingMaskIntoConstraints = false

因此,这是在UITableViewCell中添加UIView的完整功能,如下所示:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

    //if already added the subview?
    if cell.contentView.subviews.count == 0 {

        let view = UIView() //your pinkView

        view.translatesAutoresizingMaskIntoConstraints = false
        view.backgroundColor = UIColor.purple

        cell.contentView.addSubview(view)

        view.centerXAnchor.constraint(equalTo: cell.contentView.centerXAnchor).isActive = true
        view.centerYAnchor.constraint(equalTo: cell.contentView.centerYAnchor).isActive = true
        view.widthAnchor.constraint(equalToConstant: 50.0).isActive = true
        view.heightAnchor.constraint(equalToConstant: 50.0).isActive = true
    }

    return cell
}

答案 1 :(得分:0)

您无需将translatesAutoresizingMaskIntoConstraints = false设置为表视图单元格的contentView

您只需将translatesAutoresizingMaskIntoConstraints = false设置为动态添加的视图,默认情况下将IBOutlets translatesAutoresizingMaskIntoConstraints = false设置为该视图。