禁用

时间:2015-10-30 15:12:35

标签: ios swift uitableview

我正在使用swift创建一个iOS应用。我想构建一个不可滚动的tableView,它在屏幕上显示数据源中包含的所有信息,因此每个单元格的高度取决于数据中的条目数。例如,如果视图的高度为500且data.count = 10,则每个单元格的高度为50.当单元格的高度为~100.8时,会出现问题(对应于我的数据中的5个条目,使用我的iPhone 5)。实际上,即使设置tableView.separatorStyle = .None,也会为此单元格的高度显示一个奇怪的分隔符。

下面,第一个图像(数据中的7个条目)是正常的,而第二个图像(数据中的5个条目)出现这些分隔符。

for 7 entries, no problem

for 5 entries, problem

这是我的视图控制器:

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!

    let reuseIdentifier = "Cell"
    var data = ["bobby", "bob", "john", "helena", "clara", "oliver", "steve"]
    var visibleHeight:CGFloat!

    override func viewDidLoad() {
        super.viewDidLoad()
        edgesForExtendedLayout = .None
        tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: reuseIdentifier)
        editModeOff()
        tableView.scrollEnabled = false
        visibleHeight = viewVisibleSize.height
        tableView.separatorStyle = .None
    }

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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
        let cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath)
        cell.textLabel!.text = data[indexPath.row]
        cell.selectionStyle = .None
        return cell
    }

    func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) {
        let stringToMove = data[sourceIndexPath.row]
        data.removeAtIndex(sourceIndexPath.row)
        data.insert(stringToMove, atIndex: destinationIndexPath.row)
    }

    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        if editingStyle == .Delete{
            data.removeAtIndex(indexPath.row)
            tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade)
        }
    }

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        print(visibleHeight/CGFloat(data.count))
        return visibleHeight/CGFloat(data.count)
    }

    func editModeOn(){
        tableView.setEditing(true, animated: true)
        navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Done, target: self, action: "editModeOff")
    }

    func editModeOff(){
        tableView.setEditing(false, animated: true)
        navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Edit, target: self, action: "editModeOn")
    }

}

extension ViewController{

    var viewVisibleSize:CGSize{
        var size = view.bounds.size

        if !UIApplication.sharedApplication().statusBarHidden{
            size.height -= UIApplication.sharedApplication().statusBarFrame.height
        }

        if let navigationController = navigationController{
            size.height -= navigationController.navigationBar.bounds.height
        }

        if let tabBarController = tabBarController{
            size.height -= tabBarController.tabBar.bounds.height
        }

        return size
    }


}

4 个答案:

答案 0 :(得分:0)

我总是清除分隔符的颜色:

 tableView.separatorColor = UIColor.clearColor()

答案 1 :(得分:0)

我通过设置:

找到了一个肮脏的解决方案
cell.contentView.layer.borderWidth = 0.5
cell.contentView.layer.borderColor = UIColor.whiteColor().CGColor
tableView:cellForRowAtIndexPath:方法中的

。但可以肯定的是,还有更好的方法......

答案 2 :(得分:0)

在您的viewDidLoad:中,您可以尝试self.tableView.tableFooterView = UIView()

答案 3 :(得分:0)

很有趣。函数中的问题
tableView(tableView:UITableView,heightForRowAtIndexPath indexPath:NSIndexPath) - > CGFloat
它对某些浮点数有奇怪的行为,会出现一个分隔符。
我提供你这样的返回高度:

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        print(self.visibleHeight/CGFloat(self.tableArray.count))
        let rett = self.visibleHeight/CGFloat(self.tableArray.count)
        let convert = NSString(format: "%.0f", rett)
        return CGFloat(convert.floatValue)
    }