自我调整细胞不适用于Swift

时间:2015-04-07 07:05:55

标签: ios uitableview swift

我没有添加任何原型单元格,但它应该根据最新的iOS 8 tableView工作。这是我的代码

class ViewController: UIViewController,UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var tabledata = ["hn, helooo dnsjakdnksandksajndksandkasjnkc sacjkasc jkas kjdjknasjkdnsaklmdlksamxklsamxlksamdklsandk cnsdjdnsklnjnfkdnflasfnlfnkdsnfjkdnfjkdsnjkd njsdkadnaksjdnjkasndsakdnkasdnsalkdn cjkndskasdnsakndksandjksandksajndkj ndsjkadnksalndls;adnklsa;mdas,mcjksanckasdjnklscaskncjks" , "hi i am ishan, helooo dnsjakdnksandksajndksandkasjnkc sacjkasc jkas kjdjknasjkdnsaklmdlksamxklsamxlksamdklsandk cnsdjdnsklnjnfkdnflasfnlfnkdsnfjkdnfjkdsnjkd njsdkadnaksjdnjkasndsakdnkasdnsalkdn cjkndskasdnsakndksandjksandksajndkj ndsjkadnksalndls;adnklsa;mdas,mcjksanckasdjnklscaskncjkssndjkasndjksandkjasndkjasndkjasndkjasndjka ", "a" ]
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
   let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")

    cell.textLabel.text = self.tabledata[indexPath.row]

    return cell
}
override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.estimatedRowHeight = 100.0;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
    tableView.reloadData()
    // 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.
}


}

删除/添加这些行时,我看不到任何更改

    self.tableView.estimatedRowHeight = 100.0;
    self.tableView.rowHeight = UITableViewAutomaticDimension;

4 个答案:

答案 0 :(得分:6)

要使自动单元格大小调整起作用,必须将布局约束添加到完全描述视图垂直大小的单元格子视图中。没有这些限制,你的细胞无法知道它们实际需要多大。这在故事板中最容易完成。

estimatedRowHeight只是对表视图的一个提示,它通过推迟单元格的几何计算来滚动时间来增加表加载时间(autolayout的计算成本可能很高)。仍需要Autolayout来告诉表格查看每个单元格的大小。

另外值得注意的是,您不会在表格视图中重复使用单元格。在tableView(_:cellForRowAtIndexPath:)方法中,您应该每次都将单元格出列而不是创建新单元格

func tableView(tableView: UITableView, cellForRowAtAindexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
    // configure cell...
    return cell
}

答案 1 :(得分:2)

1:添加ViewDidLoad

tableView.estimatedRowHeight = 140 // prototype cell height
tableView.rowHeight = UITableViewAutomaticDimension

2:在viewDidAppear中重新加载你的tableview

重要说明:要使UITableViewAutomaticDimension正常工作,您必须设置相对于单元格容器视图的所有左,右,底部和顶部约束。

答案 2 :(得分:-1)

动态提供表视图行高

会有所帮助
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSDictionary *dictItinararay=[arrCodes objectAtIndex:indexPath.row];

    CGSize sizeOfName = [[dictItinararay valueForKey:@"Name"] sizeWithFont:[UIFont systemFontOfSize:16] constrainedToSize:CGSizeMake(180, 1000) lineBreakMode:NSLineBreakByWordWrapping];

    if(sizeOfName.height>45) {
        return sizeOfName.height+10;
    }
    else {
        return 45;
    }
}

答案 3 :(得分:-3)

您可以简单地添加线来设置​​单元格高度

cell.textLabel.numberOfLines = 20