Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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
Uitableview Swift:具有动态高度的自动布局和表格视图单元格_Uitableview_Swift_Ios8 - Fatal编程技术网

Uitableview Swift:具有动态高度的自动布局和表格视图单元格

Uitableview Swift:具有动态高度的自动布局和表格视图单元格,uitableview,swift,ios8,Uitableview,Swift,Ios8,我创建了一个测试项目来理解具有可变高度的表格单元格。我已经阅读了许多关于StackOverflow和其他地方的教程,但我仍然做了一些错误的事情,我不太确定是什么 如何确保无论字符串长度如何,表格单元格的高度都会更改以容纳所有文本 在这里,我使用不同长度的字符串数组设置了我的表视图 下面是我的模拟器显示的内容,以及我的代码: class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

我创建了一个测试项目来理解具有可变高度的表格单元格。我已经阅读了许多关于StackOverflow和其他地方的教程,但我仍然做了一些错误的事情,我不太确定是什么

如何确保无论字符串长度如何,表格单元格的高度都会更改以容纳所有文本

在这里,我使用不同长度的字符串数组设置了我的表视图

下面是我的模拟器显示的内容,以及我的代码:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    var items: [String] = ["We", "Aenean lacinia bibendum nulla sed consectetur.", "Vestibulum id ligula porta felis euismod semper. Maecenas sed diam eget risus varius blandit sit amet non magna. Sed posuere consectetur est at lobortis. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Cras mattis consectetur purus sit amet fermentum. Etiam porta sem malesuada magna mollis euismod. Sed posuere consectetur est at lobortis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.", "Blah", "one two three", "Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam.", "gum gum gum gum", "Blah", "one two three", "Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam.", "gum gum gum gum", "Blah", "one two three", "Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam.", "gum gum gum gum", "Blah", "one two three", "Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam.", "gum gum gum gum", "Blah", "one two three", "Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam.", "gum gum gum gum", "Blah", "one two three", "Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam.", "gum gum gum gum"]

    @IBOutlet var tableView: UITableView!

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.items.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell

        cell.textLabel?.text = self.items[indexPath.row]

        return cell
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        println("You selected cell #\(indexPath.row)!")
    }



    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

        self.tableView.rowHeight = UITableViewAutomaticDimension
        self.tableView.estimatedRowHeight = 130.0
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func prefersStatusBarHidden() -> Bool { return true }
}
在我的故事板中,我有一个单独的测试单元,其中设置了一些约束,这些约束可能不正确,不确定。约束似乎是确定这个实现或完全搞砸它的关键


任何帮助都将不胜感激。谢谢

要将自动布局与多行标签一起使用,需要在viewDidLoad或其他适当位置设置preferredMaxLayoutWidth属性。这将导致autolayout执行正确的操作,并使标签扩展为多行标签。看


请注意,要使其在UITableViewCell中正常工作,还应响应heightForRowAtIndexPath-请参见:

请同时实现它

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath : NSIndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }

对不起,你真正的问题是什么?问题是什么?我的问题是单元格的高度应该是可变的,以包含数组项中的所有文本。相反,它们被一个。。。。我也将在问题中重新添加此项,以便更清晰。您是否将UITableViewCell中的标签设置为多行标签?它当前设置为0。我也尝试过使用值1-5,没有任何变化。当我使用故事板时,问题是没有正确使用autolayout来确保每个元素都具有适当的约束、宽度和高度。从那以后,我就不再使用故事板,而是开始使用制图来进行手动布局,以获得更多的控制。从我所做的研究来看,这不是一个真正的问题,我不相信这两个答案都是正确的。self.tableView.rowHeight=UITableViewAutomaticDimension和self.tableView.EstimateDrowEight=130.0旨在使用自动布局约束来基本设置最小值或自动计算尺寸。HeightForRowatineXpath似乎用硬君士坦丁替代,如果您不相信文档是正确的,则无法帮助您…在Apple文档中很明显:当布局约束应用于标签时,此属性会影响标签的大小。在布局过程中,如果文本超出此属性指定的宽度,则附加文本将流向一行或多行新行,从而增加标签的高度。在heightForRowAtIndexPath中,您可以计算自动布局后标签的高度,并返回此高度。下面是一个示例:我不同意的原因是我已经阅读了许多其他教程,其中指定了我在上面的评论中提到的两行,没有一行强调HeightForRowatineXpath方法。再说一次,我没办法让它工作,所以谁知道什么是对的?