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

Posted

技术标签:

【中文标题】IOS Swift UITableView - 无法解释的边距 - 如何摆脱?【英文标题】:IOS Swift UITableView - unexplained margins - how to get rid of? 【发布时间】:2015-02-28 12:58:34 【问题描述】:

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

这是单元格:

这里是带有 UITableView 的 xib:

我无法解释蓝色单元格两侧的白边???

我试过了:

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 构建。

这是带有多余边距的麻烦输出:


@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:

所以我得到了它的工作

    我删除了父 UIView 我创建了一个新的 UIView 我重新添加了 UITableView 和 UIActivityIndi​​catorView

我从一个 Objective-C xib(写于一年多前)复制并粘贴(Apple+C)到一个新的 Swift xib 中——我怀疑有一些有趣的设置挥之不去,导致这些无法解释的边距。

感谢大家的帮助,

【问题讨论】:

确保您已在 Will display cell 方法中添加布局边距代码。***.com/questions/25770119/… 您是否已经在 Storyboard/IB 中点击了Update Constraints?否则,iOS 将在运行时使用自动生成的约束 是的,我试过了。我什至恢复到默认的 UITableViewCell 并且我仍然看到黄色边距......现在完全卡住了......;( 请查看更新后的问题(更新 2) 【参考方案1】:

对于单元格,试试这个:

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
 

【讨论】:

谢谢。虽然它不起作用 - 我仍然有完全相同的 - 两边的白色边距...... 从图像看来,tableView 和它的父视图之间存在边距,但我不能确定。要进行调试,请在您的 viewDidLoad 中设置 self.view.backgroundColor = UIColor.yellowColor()self.tableView.backgroundColor = UIColor.cyanColor() 并在您的单元格创建代码集中设置 cell.contentView.backgroundColor = UIColor.redColor() 嗨,Teemu,我刚刚更新了。感谢您的建议。如何让 tableview 宽度匹配父视图? 感谢您的建议。不幸的是,当我添加 self.view.layoutMargins = UIEdgeInsetsZero 时没有任何变化 - 我仍然可以看到两边的黄色边距。 @Eamorr 你可以为你的表格视图提供全宽吗?比如 tableview=self.view.bound.size.width.【参考方案2】:

我遇到了同样的问题,下一行对我有用。

// (Using Swift 3.0)
cell.contentView.layoutMargins = UIEdgeInsets.zero

重要的是要知道单元格内的内容视图是具有边距的视图,而不是具有边距的单元格。

【讨论】:

以上是关于IOS Swift UITableView - 无法解释的边距 - 如何摆脱?的主要内容,如果未能解决你的问题,请参考以下文章

iOS - UIVIewController 中的 UITableView 不显示所有行 [Swift]

ios开发系列之Swift_UI_UITableView

iOS开发之UITableView的使用(swift)

iOS开发之UITableView的使用(swift)

iOS开发之UITableView的使用(swift)

iOS / Swift 3.0:如何确定 UITableView 中当前可见的行?