IOS Swift UITableView - 无法解释的边距 - 如何摆脱?

时间:2015-02-28 12:58:34

标签: ios xcode uitableview swift xib

所以我有一个带自定义单元格的UITableView ......

这是单元格:

enter image description here

这是带有UITableView的xib:

enter image description here

我无法解释蓝色细胞两侧的白色边缘???

我试过了:

override func viewDidLoad() {
    super.viewDidLoad()

    ...

    table.layoutMargins = UIEdgeInsetsZero
    table.separatorInset = UIEdgeInsetsZero
}

我甚至尝试过iOS 8 UITableView separator inset 0 not working的建议:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell:Cell_Jobs = self.table.dequeueReusableCellWithIdentifier("Cell_Jobs") as Cell_Jobs

    cell.area.text = "Hello"


    // kill insets for iOS 8
    let nf = NSNumberFormatter()
    let version = nf.numberFromString(UIDevice.currentDevice().systemVersion)

    if(version?.floatValue >= 8){
        cell.preservesSuperviewLayoutMargins = false
        cell.layoutMargins = UIEdgeInsetsZero
    }
    // iOS 7 and later
    if(cell.respondsToSelector("setSeparatorInset:") ) {
        cell.separatorInset = UIEdgeInsetsZero
    }

    return cell
}

但我仍然无法让左右边缘消失......

我做错了什么?

XCode6.1.1。为iOS 8构建。

这是带有不需要的边距的麻烦输出:

enter image description here


@Teemu Kurppa的更新:

viewDidLoad(),我做了:

self.view.backgroundColor = UIColor.yellowColor()
self.table.backgroundColor = UIColor.cyanColor()

tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath),我做了:

cell.contentView.backgroundColor = UIColor.redColor()

更新2:

所以我开始工作了

  1. 我删除了父UIView
  2. 我创建了一个新的UIView
  3. 我重新添加了UITableView和UIActivityIndi​​catorView
  4. 我从一个Objective-C xib(一年前写的)复制并粘贴(Apple + C)到一个新的Swift xib中 - 我怀疑有一些有趣的设置挥之不去导致这些无法解释的边缘。 / p>

    感谢帮助人员,

    enter image description here

2 个答案:

答案 0 :(得分:2)

对于细胞,试试这个:

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

但根据编辑过的信息,您似乎在表视图的容器视图中有边距。这可能来自表视图和视图之间的约束(逐个检查),或者视图中有布局边距,在这种情况下尝试;

 override func viewDidLoad() {
     // ... 
     self.view.layoutMargins = UIEdgeInsetsZero
 }

答案 1 :(得分:1)

稍后,但也许像我这样的人需要相同的解决方案。我遇到了同样的问题,对我来说是下一行。

cell.contentView.layoutMargins = UiEdgeInsets.zero (Using Swift 3.0)

了解单元格内的内容视图是具有边距的内容视图,而不是具有边距的单元格,这一点非常重要。