自定义UITableView单元格的堆栈视图无法检测超级视图维度

时间:2019-02-24 02:29:54

标签: ios swift uitableview nib custom-cell

上下文,我有一个UITableViewController,在.xib文件中设计了自定义单元格。在该.xib文件中,我尝试设置动态宽度,因此将单元格宽度分为三个子视图。

问题是该单元格似乎无法获得正确的宽度,从而导致该单元格无法填充整个宽度。这是一张图片,可以更好地说明我在说什么。

cell_not_filling_width

我的理解(可能完全误解了)在.xib文件中设置帧约束不是很好的选择,因为程序直到运行时才知道宽度。换句话说,awakeFromNib(1.)在确定屏幕宽度之前就已加载...因此,idk如何解决此问题。任何指导将不胜感激。

  1. 大概是在此处设置宽度的地方-当我在cellForRowAt中打印出.xib文件时,在我的界面生成器上的宽度是相同的。

说明在我的viewDidLoad函数中,我已经这样注册了nibfile,所以我认为这不是问题。 tableView.register(UINib(nibName: "NewTableViewCell", bundle: nil) , forCellReuseIdentifier: "newTableViewCell")

以下是一些可能相关的代码。

NewTableViewCell.swift

import UIKit

class NewTableViewCell: UITableViewCell {

    @IBOutlet var typeLabel: UILabel!
    @IBOutlet var timeLabel: UILabel!
    @IBOutlet var completedLabel: UILabel!
    @IBOutlet var correctLabel: UILabel!
    @IBOutlet var parentView: UIView!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

}

parentView是一个包含三个子视图的视图。

Here's .xib文件的图片

Here's这是我对.xib文件的约束的图片(看起来很混乱)

更新 尝试了堆栈视图方法:XCode只是将宽度定义为具有最大宽度的子视图(根据文本的大小)

Here是当前情况和当前制约因素的图片

我认为constraints on the label也可能是相关的:

UPDATE2 好吧,我想我已经找到问题了;基本上,堆栈视图似乎无法检测超级视图的长度和宽度及其尺寸。

注意,我已经编辑了约束。

Here是将宽度和高度设置为恒定值时的样子。堆栈视图实际上将转到设置的约束

Here是排除这些约束后的样子。因此,看来宽度和高度都是0。这就是为什么我认为从超级视图来看,约束没有被采用。

有人知道如何解决此问题吗?

1 个答案:

答案 0 :(得分:0)

在cellforRow中尝试以下代码。

为stackviewWidth添加IBOutliet并按如下所示动态设置。另外,通过向单元格添加背景色来检查单元格是否达到设备的整个宽度。

if  let appDelegate =  UIApplication.shared.delegate as? AppDelegate,
    let window = appDelegate.window {
    cell.stackViewWidthConstraint = window.bounds.width
}