如何在UITableView的底部只设置一个UITableCell?

时间:2016-11-17 11:18:17

标签: ios swift uitableview swift3

我想在UITableCell的底部只设置一个UITableView。像这样:

+----------------+
| +------------+ |
| |   cell 1   | |
| +------------+ |
| +------------+ |
| |   cell 2   | |
| +------------+ |
| +------------+ |
| |   cell 3   | |
| +------------+ |
|                |
|                |
|                |
|                |
|                |
|                |
| +------------+ |
| | Last cell  | |
| +------------+ |
+----------------+

但我不知道如何实现这一目标。

我看过:

但所有这些都是将所有单元格设置在UITableView的底部,而我无法为只有一个单元格执行此操作。

是否可以将最后一个单元格设置在UITableView的底部?我怎样才能实现它?

编辑:我已尝试使用两个部分作为评论建议,但它会复制第二部分cell 1cell 2cell 3的空间。< / p>

我希望第二部分只有Last cell而不是空格等于其余单元格的高度。之后,我想在第一部分的footerView中添加一个特定的空间。

提前致谢!

2 个答案:

答案 0 :(得分:1)

我认为你需要的是这样的:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet var tableView: UITableView!
var array = ["1","2","3","4"]
var dummyInserted = false

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    tableView.reloadData()
    if array.count < 15 {
        array.insert("", at: array.count-1)
        dummyInserted = true
        tableView.reloadData()
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - UITableView DataSource
func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

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

// MARK: - UITableView Delegate
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "CellIdentifier")

    cell?.textLabel?.text = array[indexPath.row]

    return cell!
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    if dummyInserted == true {

        if indexPath.row == array.count-2 {

            return tableView.bounds.size.height - CGFloat(((array.count-1) * 44))
        }
    }

    return 44
}
}

因此,如果你知道你的表视图可以容纳例如15个可见行(也许你必须计算它),那么你可以

1)如果最后一个单元格可见,则在第二个最后一个索引

处向您的数组中插入一个虚拟值

2)将虚拟行的高度设置为高度,最后一个值位于表视图的底部

也许你必须改变一些代码,但它应该给你一个很好的起点我的想法

应该看起来像

enter image description here

答案 1 :(得分:0)

为uitableview.Put创建两个部分FirstSection中的第一个项目和第二个部分中的另一个项目。

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    NSString *sectionName;
    switch (section)
    {
        case 0:
            sectionName = NSLocalizedString(@"mySectionName", @"mySectionName");
            break;
        case 1:
            sectionName = NSLocalizedString(@"myOtherSectionName", @"myOtherSectionName");
            break;
        // ...
        default:
            sectionName = @"";
            break;
    }    
    return sectionName;
}