表视图单元格和表视图标题视图的大小

Posted

技术标签:

【中文标题】表视图单元格和表视图标题视图的大小【英文标题】:Sizing of table view cell and table view header view 【发布时间】:2017-04-05 14:04:05 【问题描述】:

我有一个表格视图,它显示表格视图单元格和标题视图(搜索栏)。我希望表格视图单元格的宽度为 设备屏幕大小的 0.9,并且标题视图具有相同的大小。但是,这是不可能的,因为单元格和标题视图都包含在表格视图中。

当我使用布局锚约束时,所有内容都会调整大小(包括标题视图)。

self.tableView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true

// here's the 0.9 multiplier
self.tableView.widthAnchor.constraint(equalTo: self.view.widthAnchor, multiplier: 0.9).isActive = true
self.tableView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
self.tableView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: 0).isActive = true

如何确保表格视图标题与视图控制器具有相同的宽度,同时保持表格视图宽度为主视图的 0.9?

【问题讨论】:

我会尝试创建恒定宽度的标题(ViewController 的宽度),然后将 tableView 的clipsToBounds 属性设置为false。不确定它是否会起作用,但值得一试。 为什么不简单地将表格设置为屏幕的宽度...让您的标题查看整个宽度...然后让您的单元格宽度为 0.9? @DonMag 谢谢。问题是我不知道如何使我的单元格宽度为 0.9。我还没有找到任何方法或方法来做到这一点。 你是如何设计你的细胞的?您可以在单元格内使用约束,就像在表格中使用它们一样容易...... 谢谢。我对表格视图单元进行了子类化,并在 cellForItem 方法中使用了这个自定义类。我应该在该方法中添加约束吗? 【参考方案1】:

最好不要尝试调整TableViewCell 或其contentView 的约束。但是,您可以将这两个视图的背景颜色设置为 .clear,然后使用所需的约束将子视图添加到 contentView

class CustomCell: UITableViewCell 

    let smallerView = UIView()
    override init(frame: CGRect) 
        super.init(frame)
        smallerView.translatesAutoresizingMaskIntoConstraints = false
        contentView.addSubview(smallerView)
        smallerView.widthAnchor.contraint(equalTo: contentView.widthAnchor, multiplier: 0.9).isActive = true
        smallerView.heightAnchor.contraint(equalTo: contentView.heightAnchor).isActive = true
    

【讨论】:

对不起,我不明白。我应该将表格视图单元格添加到smallerView 吗? 您需要制作一个自定义的 tableviewcell 并向每个单元格添加 smallViews。查看我的更新【参考方案2】:

您的自定义单元格“以”ContentView“开头”,它使用表格视图的插图来设置其宽度...

所以,如果你有一堆元素/对象要添加到内容视图中......

您最好的选择可能是首先添加一个标准的UIView 作为“容器视图”...(只是我的命名)...

然后,将该“包含视图”的约束设置为 contentView 宽度的 0.9...

您添加到“包含视图”的所有元素都将受到相对于它的约束,因此将全部保持在 0.9 宽度内...

【讨论】:

以上是关于表视图单元格和表视图标题视图的大小的主要内容,如果未能解决你的问题,请参考以下文章

表视图出列可重用单元格重叠

创建将在不同环境中提取有关数据集和表大小的元数据信息的视图

无法从 xib 将 IBAction 连接到表视图

自定尺寸表视图

表视图侧视图控制器中的当前选定行

内部另一个表视图的表视图行高