tableView 的顶部有一些空白区域

Posted

技术标签:

【中文标题】tableView 的顶部有一些空白区域【英文标题】:The top of tableView has some empty area 【发布时间】:2016-10-11 07:10:22 【问题描述】:

问题发生在图片中。 at the top of tableView has some empty area 接口是viewController(嵌入navigationController)。我在上面放了一个tableView。并构造了它的约束。但是运行代码,问题就出现了。我想尝试使用两种方法来解决它,但没有任何变化。

   self.automaticallyAdjustsScrollViewInsets = true

我将tableView的约束调整为superView,我将top的约束设置为-100,效果很好。 代码如下:

import UIKit
import CoreData


class ViewController: UIViewController 

@IBOutlet weak var tableView: UITableView!
var people:[NSManagedObject] = []

override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.title = "My book"
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")


override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else 
        return
    
    let managedContext = appDelegate.persistentContainer.viewContext
    let fetchRequest = NSFetchRequest<NSManagedObject>(entityName:"Person")
    do 
        people = try managedContext.fetch(fetchRequest)
    catch let error as NSError 
        print("Cannot fetch \(error),\(error.userInfo)")

    

@IBAction func addName(_ sender: AnyObject) 
    let alert = UIAlertController(title: "New name", message: "Add a name", preferredStyle: .alert)
    let saveAction = UIAlertAction(title: "Save", style: .default)  [unowned self] action in
        guard let textField = alert.textFields?.first,
            let nameToSave  = textField.text else return
    
        self.save(name: nameToSave)
        self.tableView.reloadData()


    let cancelAction = UIAlertAction(title: "Cancel", style: .default)

    alert.addTextField()
    alert.addAction(saveAction)
    alert.addAction(cancelAction)
    present(alert,animated: true)


    func save(name:String) 
        guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else 
            return
        
        let managedContext = appDelegate.persistentContainer.viewContext
        let entity = NSEntityDescription.entity(forEntityName: "Person", in: managedContext)
        let person = NSManagedObject(entity: entity!, insertInto: managedContext)
        person.setValue(name, forKey: "name")
        do 
            try managedContext.save()
            people.append(person)
        catch let error as NSError 
            print("Could not save\(error),\(error.userInfo)")
        
    





extension ViewController :UITableViewDataSource 
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return people.count

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let person = people[indexPath.row]
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
    cell.textLabel?.text = person.value(forKey: "name") as? String
    return cell



【问题讨论】:

【参考方案1】:

您应该从情节提要中为tableView 设置约束并设置top space = 0

【讨论】:

是的,我知道 superView.top 的约束为零。 请看这里的视频link【参考方案2】:

您也可以尝试在您的viewDidLoad 方法中设置edgesForExtendedLayout

self.edgesForExtendedLayout = []

【讨论】:

不能解决这个问题,反而会导致新的问题。indexPath行之间的行消失,点击行时闪烁【参考方案3】:

尝试实施

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat 
    return .min 

【讨论】:

我发现问题是tableView的***约束,我调整它然后运行项目,没关系。

以上是关于tableView 的顶部有一些空白区域的主要内容,如果未能解决你的问题,请参考以下文章

iOS TableView上面有空白的区域时的处理

具有自动布局的 iOS8 UITableView 在单元格上方有一个空白区域

ImageView显示图像顶部和底部的空白区域

调整浏览器大小时,SVG 顶部有空白区域

iOS 9 和 10:使用安全区域布局指南时在屏幕顶部添加了空白区域

使用SDCycleScrollView轮播图会在顶部出现一块空白区域的解决方案