上下文,我有一个UITableViewController,在.xib文件中设计了自定义单元格。在该.xib文件中,我尝试设置动态宽度,因此将单元格宽度分为三个子视图。
问题是该单元格似乎无法获得正确的宽度,从而导致该单元格无法填充整个宽度。这是一张图片,可以更好地说明我在说什么。
我的理解(可能完全误解了)在.xib文件中设置帧约束不是很好的选择,因为程序直到运行时才知道宽度。换句话说,awakeFromNib
(1.)在确定屏幕宽度之前就已加载...因此,idk如何解决此问题。任何指导将不胜感激。
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。这就是为什么我认为从超级视图来看,约束没有被采用。
有人知道如何解决此问题吗?
答案 0 :(得分:0)
在cellforRow中尝试以下代码。
为stackviewWidth添加IBOutliet并按如下所示动态设置。另外,通过向单元格添加背景色来检查单元格是否达到设备的整个宽度。
if let appDelegate = UIApplication.shared.delegate as? AppDelegate,
let window = appDelegate.window {
cell.stackViewWidthConstraint = window.bounds.width
}