以编程方式添加UITableView会在单元格左侧留出大空间

时间:2016-06-06 21:36:09

标签: ios swift uitableview

所以我以编程方式向UITableView添加UIViewController,我得到以下结果:

enter image description here

我在viewDidLoad中制作表格如下:

    let size = view.bounds.size
    table = UITableView(frame: CGRectMake(0, 65, size.width, size.height-65), style: .Plain)
    table.delegate = self
    table.dataSource = self
    table.separatorInset = UIEdgeInsetsZero
    table.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

这是我设置cells

的方法
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "cell")
    cell.selectionStyle = .None
    cell.imageView?.image = blueCheck
    cell.textLabel?.text = "TEXT"
    cell.separatorInset = UIEdgeInsetsZero
    return cell
}

我也试过这样做,这是对类似问题的建议答案。

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    cell.separatorInset = UIEdgeInsetsZero
    cell.layoutMargins = UIEdgeInsetsZero
}

我也尝试过不使用可重复使用的cells和设置cell框架但没有任何作用的内容。

欢迎任何帮助或想法。谢谢!

编辑:

设置table.separatorInset = UIEdgeInsetsZero是导致空cells向左移动的原因,就像上面显示的SS一样。当删除它时,空cells也有很大的空间。

我还尝试以编程方式使用约束来查看是否有任何区别。我遗憾地得到了同样的结果。这就是我试过的:

    let bottomConstraint = NSLayoutConstraint(item: table, attribute: NSLayoutAttribute.BottomMargin, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.BottomMargin, multiplier: 1, constant: 0)
    let topConstraint = NSLayoutConstraint(item: table, attribute: NSLayoutAttribute.TopMargin, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.TopMargin, multiplier: 1, constant: 65)
    let leftConstraint = NSLayoutConstraint(item: table, attribute: NSLayoutAttribute.LeadingMargin, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.LeadingMargin, multiplier: 1, constant: 0)
    let rightConstraint = NSLayoutConstraint(item: table, attribute: NSLayoutAttribute.TrailingMargin, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.TrailingMargin, multiplier: 1, constant: 0)

2 个答案:

答案 0 :(得分:3)

所以问题是iOS 9的问题,有时您还需要设置cellLayoutMarginsFollowReadableWidth = false以自定义插入和边距。在使用故事板+约束时我还没有碰到这个,所以我不确定这是否只是以编程方式制作所有内容时出现的。

以下是我为使其工作而添加的代码:

override func viewWillAppear(animated: Bool) {
    if #available(iOS 9.0, *) {
        table.cellLayoutMarginsFollowReadableWidth = false
    } else {
        // Fallback on earlier versions
    }
}

override func viewDidLayoutSubviews() {
    table.separatorInset = UIEdgeInsetsZero
    table.layoutMargins = UIEdgeInsetsZero
}

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    cell.separatorInset = UIEdgeInsetsZero
    cell.preservesSuperviewLayoutMargins = false
    cell.layoutMargins = UIEdgeInsetsZero
}

答案 1 :(得分:0)

在将此Tableview添加为子视图之前,请检查Superview框架。