Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 表视图单元格的自动大小在标准UIViewController类中似乎不起作用_Ios_Uitableview_Swift_Autosize_Tableviewcell - Fatal编程技术网

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
    指定了左、右和底部约束
  • 这两个类都将EstimateDrowEight设置为一个数字,将rowHeight设置为
    UITableViewAutomaticDimension
  • 所有
    UILabel
    的lines属性都设置为0
  • 两个场景中的第一个
    UILabel
    的换行符都设置为换行
  • 两个场景中的第二个
    UILabel
    的换行符都设置为截断尾部
  • 下面是interface builder中场景的屏幕截图。左侧基于
    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
    中执行相同操作。按照回答中提到的步骤进行操作。我已经测试过了,它可以工作了。