Ios 表视图单元格的自动大小在标准UIViewController类中似乎不起作用
为了验证这个问题,我创建了一个测试项目。在项目情节提要中,我有两个场景。一个场景基于创建项目时添加到单视图应用程序的初始Ios 表视图单元格的自动大小在标准UIViewController类中似乎不起作用,ios,uitableview,swift,autosize,tableviewcell,Ios,Uitableview,Swift,Autosize,Tableviewcell,为了验证这个问题,我创建了一个测试项目。在项目情节提要中,我有两个场景。一个场景基于创建项目时添加到单视图应用程序的初始ViewController。第二个场景是通过将UITableViewController拖动到情节提要上创建的 在这两个场景中,我相信我已经配置了原型单元,因此它应该自动调整大小。当我将初始的ViewController设置为基于UIViewController的值时,UITableViewCell无法正确显示/调整大小。(见下文) 但是,当我将初始的ViewControl
ViewController
。第二个场景是通过将UITableViewController
拖动到情节提要上创建的
在这两个场景中,我相信我已经配置了原型单元,因此它应该自动调整大小。当我将初始的ViewController
设置为基于UIViewController的值时,UITableViewCell
无法正确显示/调整大小。(见下文)
但是,当我将初始的ViewController
设置为基于UITableViewController
的时候,一切正常。(见下文)
代码/项目非常简单,我希望有人已经看到了这一点,并且可以告诉我为什么当类基于UIViewController
而不是UITableViewController
时,UITableViewController
的自动大小不能正常工作。任何帮助都将不胜感激。看来我不能在这里上传项目,所以我会尝试将它上传到另一个位置,并用链接更新问题
回答标准问题
UILabel
ui标签
指定了左、上、右和下约束UILabel
指定了左、右和底部约束UITableViewAutomaticDimension
UILabel
的lines属性都设置为0UILabel
的换行符都设置为换行UILabel
的换行符都设置为截断尾部UIViewController
,右侧基于UITableViewController
这里有一个我希望的代码链接:对我来说,它很有效
ui标签
(右、上、左)约束UILabel
(右、上、左、下)约束UITableViewcell
override func awakeFromNib() {
super.awakeFromNib()
up.lineBreakMode = NSLineBreakMode.ByWordWrapping // Label outlet
down.lineBreakMode = NSLineBreakMode.ByWordWrapping // Label outlet
up.numberOfLines = 0
down.numberOfLines = 0
// Initialization code
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
编辑
在UITableViewController
override func awakeFromNib() {
super.awakeFromNib()
up.lineBreakMode = NSLineBreakMode.ByWordWrapping // Label outlet
down.lineBreakMode = NSLineBreakMode.ByWordWrapping // Label outlet
up.numberOfLines = 0
down.numberOfLines = 0
// Initialization code
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
UIViewController中的
override func awakeFromNib() {
super.awakeFromNib()
up.lineBreakMode = NSLineBreakMode.ByWordWrapping // Label outlet
down.lineBreakMode = NSLineBreakMode.ByWordWrapping // Label outlet
up.numberOfLines = 0
down.numberOfLines = 0
// Initialization code
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
因此,我发现了“银弹”,它似乎解决了许多关于原型电池自动布局的挑战
在cellforrowatinexpath函数中,我在返回单元格之前添加了以下代码行:
lobj_NearbyLocationEntry!.layoutIfNeeded()
(lobj_NearbyLocationEntry是我返回的单元格变量的名称。)
当我这样做时,我的表格的自动布局工作正常。另一方面,我在使用UITableViewController的代码中发现了一个缺陷。一旦数据加载完毕,一切看起来都很好,若你们向下滚动,然后再向上滚动,你们会看到一些单元格现在并没有正确布局。将这行代码放在视图控制器的代码中也解决了布局问题
我希望这能帮助坐在那里的许多人理解为什么他们的应用程序不能正确地自动布局tableView单元格。:) 你能通过Github共享简单的项目代码吗?可以将UITableView与UIViewController一起使用,并使自动标注生效。第一个标签需要上、左、右约束,第二个标签需要左、下、右约束。以及它们之间的垂直距离约束。这就是设置它们的方式吗?检查两个单元格中UILabels的numberOfLines属性。应该设置为0。我在问题中回答了所有这些问题,尽管列表不清楚。所有约束和行数都已正确设置。此示例不能来自UIViewController示例,因为它具有override func tableView,并且该override仅在使用UITableViewController时才存在。:)我正在努力上传准确的代码。示例代码已经上传到GitHub。有人能告诉我如何使其正常工作吗?从
ViewController
中删除:myTable.estimatedRowHeight=68.0,myTable.rowHeight=UITableViewAutomaticDimension
,并在TableViewController
中执行相同操作。按照回答中提到的步骤进行操作。我已经测试过了,它可以工作了。