Swift4中TableView关联视图控制器后运行时不可见,求排查
解决Swift 4中TableView显示空白的问题
嘿,我看了你的代码,问题大概率出在这几个地方,咱们一步步排查:
1. 未给TableView关联IBOutlet并设置数据源/代理
你已经让ViewController遵守了UITableViewDataSource和UITableViewDelegate协议,但TableView还不知道要找这个控制器要数据呢!
首先,在ViewController里给TableView添加IBOutlet关联:
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { // 先添加这个IBOutlet,记得在Storyboard里把TableView拖到这里完成关联 @IBOutlet weak var tableView: UITableView! // 你的其他代码...
然后在viewDidLoad方法里明确设置数据源和代理:
override func viewDidLoad() { super.viewDidLoad() // 让TableView的数据源和代理指向当前控制器 tableView.dataSource = self tableView.delegate = self }
2. 检查TableView的约束是否正确
如果你的TableView在Storyboard里没有设置正确的约束——比如没有把它的上下左右都和父视图对齐——那它的尺寸可能是0,自然显示空白。你可以在Storyboard里选中TableView,检查是否包含Leading to Superview、Trailing to Superview、Top to Superview、Bottom to Superview这四个约束。
3. 可选优化:使用cell重用机制(非必须,但推荐)
你现在直接创建UITableViewCell()的方式虽然能工作,但更好的做法是用cell重用避免内存浪费,修改后的代码如下:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cellIdentifier = "TaskCell" // 尝试重用cell,没有则创建新的 var cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) if cell == nil { cell = UITableViewCell(style: .default, reuseIdentifier: cellIdentifier) } var currentTask: String switch indexPath.section { case 0: currentTask = dailyTasks[indexPath.row] case 1: currentTask = weeklyTasks[indexPath.row] case 2: currentTask = twoWeektasks[indexPath.row] default: currentTask = "" } cell?.textLabel?.text = currentTask return cell! }
你也可以在Storyboard里给cell设置Identifier为TaskCell,这样就不用手动判断cell是否为空了。
按照上面的步骤检查一遍,应该就能正常显示你的任务列表啦!
内容的提问来源于stack exchange,提问作者Jeremy Knothing
相关产品推荐
相关产品推荐

