上下文我有一个UITableViewController,其自定义单元格设计在.xib文件中。在那个.xib文件中,我正在尝试设置动态宽度,因此将单元格宽度拆分为三个子视图。
问题是单元格似乎无法获得适当的宽度,导致单元格无法填充整个宽度。这是一张图片,以更好地说明我在说什么。
我的理解(可能完全误解了这一点)在.xib文件中设置框架约束是不好的b / c程序直到运行时才知道宽度。换句话说,awakeFromNib
(1.)在确定屏幕宽度之前加载...所以idk如何解决这个问题..任何指导将非常感激。
cellForRowAt
打印出来时注意在我的viewDidLoad函数中,我已经注册了nib文件,所以我不认为这是问题所在。 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'sa .xib文件的图片
Here's我在.xib文件上的约束图片(看起来很杂乱)
更新尝试堆栈视图方法:XCode只将宽度定义为具有最大宽度的子视图(根据文本的大小)
Here是当前形势和当前制约因素的图片
我认为constraints on the label也可能是相关的:
UPDATE2好吧我想我发现了问题;基本上,堆栈视图似乎无法检测到超视图的长度和宽度以及它的维度。
注意我编辑了约束。
如果我将宽度和高度设置为常量值,Here就是它的样子。堆栈视图实际上将转到设置约束
Here就是这样,如果我采取这些限制。因此看起来宽度和高度都是0.这就是为什么我认为超级视图没有采用约束。
有谁知道如何解决这一问题?
在cellforRow中尝试以下代码。
为stackviewWidth添加IBOutliet并动态设置如下所示。还要通过向单元格添加背景颜色来检查单元格是否达到设备的整个宽度。
if let appDelegate = UIApplication.shared.delegate as? AppDelegate,
let window = appDelegate.window {
cell.stackViewWidthConstraint = window.bounds.width
}