如何调整自定义UITableViewCell nib文件的大小以适应tableView?

时间:2016-01-08 03:51:32

标签: ios swift uitableview uinib

我的应用目前正在加载this。正如您所看到的,这不是理想的b / c,细胞不会填满整个细胞。此外,如果您注意到每个单元格的最左侧,则白色分隔线在单元格结束之前停止。

我正在使用nib文件DayofWeekSpendingTableViewCell.xib来自定义我的tableview单元格。

我有一个UITableViewController SummaryTableViewController我加载了nib文件。在方法tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)中,我尝试设置两个标签的框架,以便它们占据视图的宽度,但这无助于我的应用程序仍然像this.那样加载

class SummaryTableViewController: UITableViewController {    
    override func viewDidLoad() {
        super.viewDidLoad()

        dayOfWeek = [ .Mon, .Tue, .Wed, .Thu, .Fri, .Sat, .Sun]
        totalSpentPerDay = [0, 7.27, 0, 0, 39, 0, 0]

        // Create a nib for reusing
        let nib = UINib(nibName: "DayofWeekSpendingTableViewCell", bundle: nil)
        tableView.registerNib(nib, forCellReuseIdentifier: "nibCell")

        self.tableView.separatorColor = UIColor.whiteColor()
    }

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

        // Configure the cell...
        let cell = tableView.dequeueReusableCellWithIdentifier("nibCell", forIndexPath: indexPath) as! DayOfWeekTableViewCell
        let day = dayOfWeek[indexPath.row]

        let height = CGFloat(55)
        let dayOfWeekWidth = CGFloat(80)
        cell.dayOfWeek.text = day.rawValue.uppercaseString
        cell.dayOfWeek.frame = CGRectMake(0, 0, dayOfWeekWidth, height)
        cell.dayOfWeek.backgroundColor = colorOfDay[day]

        cell.totalAmountSpent.text = "$\(totalSpentPerDay[indexPath.row])"
        cell.totalAmountSpent.frame = CGRectMake(cell.dayOfWeek.frame.maxX + 1, 0, view.bounds.width - dayOfWeekWidth, height)
        cell.totalAmountSpent.backgroundColor = colorOfDay[day]

        return cell
    }
}

如果有人能告诉我如何使自定义UITableViewCell nib文件适合视图,我将非常感激!

3 个答案:

答案 0 :(得分:4)

所以,我看到了几件事。首先,看起来您的单元格笔尖可能会使用一些AutoLayout约束。你的笔尖可能是320px的宽度。在运行时,您的单元格的内容视图实际上是向外扩展以填充较大设备的新宽度,但您放置的绿色视图只是保持其320px配置。您可以通过更改内容视图的颜色并在模拟器中看到该颜色来测试它。我在这里重现你的细胞:

enter image description here

粉红色视图具有固定宽度,并且放置在内容视图的顶部,左侧和底部。蓝色视图是粉红色视图右侧的4个点,在中间给出了白色边缘。它放在内容视图的顶部,右侧和底部。因此,当单元格的内容视图调整大小时,AutoLayout约束将拉伸蓝色视图,使其右边缘与内容视图的右边缘保持齐平。

对于边缘插入,首先在每个单元格上的表上设置边缘插入。您可以在storyboard / nib中执行此操作,或者在代码中执行此操作:

class ViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let nib = UINib(nibName: "yubnub", bundle: nil)
        tableView.registerNib(nib, forCellReuseIdentifier: "yub")

        tableView.separatorInset = UIEdgeInsets.zero
        tableView.layoutMargins = UIEdgeInsets.zero
    }


    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return 10
    }

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

        return tableView.dequeueReusableCellWithIdentifier("yub", forIndexPath: indexPath)
    }

    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

        cell.layoutMargins = UIEdgeInsets.zero
    }
}

答案 1 :(得分:4)

应用以下解决方案,

1)首先从故事板中的尺寸检查器为您的tableview提供完全自动调整约束。

2)现在转到你的nib文件并选择tableViewcell并给它完全限制。

3)现在选择左侧标签并将其左侧和左侧对它的约束,并给右侧标签赋予正确的,向上和中间的约束。

现在不要忘记在视图控制器中实现heightForRowatIndexPath委托方法,并提及自定义xib中nib文件的相同高度。

答案 2 :(得分:0)

我有同样的错误,因为在故事板中我的tableView的内容是静态单元格。我将其更改为Dynamic Prototype并解决了问题。