自定义 UITtableViewCell 的布局约束不起作用

Posted

技术标签:

【中文标题】自定义 UITtableViewCell 的布局约束不起作用【英文标题】:Layout constraints for custom UITtableViewCell not working 【发布时间】:2017-01-03 12:02:07 【问题描述】:

我正在创建自定义 UITableViewCells,其中每个都有一个 UILabel,但除了单元格的左上角 looks like this 之外,无法让标签显示在任何其他位置。

约束似乎尚未应用,但它们正在被调用(到达断点)。我尝试用 UIImageView 替换 UILabel 并应用相同的约束,但没有出现任何内容(即表格视图单元格为空白)。

我错过了什么?

查看单元格:

import UIKit

class myTableViewCell: UITableViewCell 

    override init(style: UITableViewCellStyle, reuseIdentifier: String!) 
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        setupViews()
    

    required init?(coder decoder: NSCoder) 
        super.init(coder: decoder)
    

    let label: UILabel = 
        let label = UILabel()
        label.translatesAutoresizingMaskIntoConstraints = false
        label.font = UIFont.systemFont(ofSize: 16, weight: UIFontWeightLight)
        label.text = "Sample"
        label.backgroundColor = UIColor.red
        return label
    ()

    func setupViews () 
        addSubview(label)
        //add constraints
        let marginsGuide = self.contentView.layoutMarginsGuide
        label.leadingAnchor.constraint(equalTo: marginsGuide.leadingAnchor).isActive = true
        label.trailingAnchor.constraint(equalTo: marginsGuide.trailingAnchor).isActive = true
        label.topAnchor.constraint(equalTo: marginsGuide.topAnchor).isActive = true
        label.bottomAnchor.constraint(equalTo: marginsGuide.bottomAnchor).isActive = true
    


视图控制器:

import UIKit

class myViewController: UIViewController, UITableViewDelegate, UITableViewDataSource  

    var myTableView: UITableView = UITableView()

    var myArray = [Int]()

    override func viewDidLoad() 
        super.viewDidLoad()
        //... do stuff incl. loading data into my myArray
        let screenSize: CGRect = UIScreen.main.bounds
        self.myTableView.frame = CGRect(x: 0, y: 0, width: screenSize.width, height: screenSize.height)
        self.myTableView.delegate = self
        self.myTableView.dataSource = self
        self.myTableView.register(IngredientListTableViewCell.self, forCellReuseIdentifier: "cell")
        self.view.addSubview(myTableView)
    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return myArray.count
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = self.myTableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! myTableViewCell
        return cell
    


【问题讨论】:

【参考方案1】:

改变这个

addSubview(label)

到这里

contentView.addSubview(label)

【讨论】:

有效。注意到 self.contentView.addSubview(label) 也有效。你能帮我理解发生了什么吗? 在表格视图单元格中,始终使用内容视图。该视图用于单元格的内容。由此得名。您的代码不起作用,因为您使用了内容视图 (let marginsGuide = self.contentView.layoutMarginsGuide) 的边距,但将子视图添加到了单元格本身。

以上是关于自定义 UITtableViewCell 的布局约束不起作用的主要内容,如果未能解决你的问题,请参考以下文章

编辑文字奇怪的行为

python编写自定义函数计算约登值(约登指数Youden Index)寻找最佳阈值(thresholdcutoff)以及最佳阈值对应的ROC曲线中的坐标点

自定义UICollectionView布局

iOS UICollectionView自定义流水布局(一)

[Android] 自定义 Dialog 布局设置固定宽高无效

Grid布局(四)单元格自定义布局