嵌入式 tableview 的故事板背景颜色属性不起作用?

Posted

技术标签:

【中文标题】嵌入式 tableview 的故事板背景颜色属性不起作用?【英文标题】:Embedded tableview's storyboard background color property not working? 【发布时间】:2021-07-27 12:40:04 【问题描述】:

我展示了一个像这样的 tableview 控制器(嵌入在导航控制器中):

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let tvc = storyboard.instantiateViewController(withIdentifier: "tvcID") as! MyTableViewController
tvc.title = "My tableview title" // WORKS
let nc = UINavigationController(rootViewController: tvc)
nc.navigationBar.backgroundColor = UIColor.blue // NOT POSSIBLE USING STORYBOARD
self.present(nc, animated: true, completion: nil)

我想在storyboard上设置导航栏背景颜色,并通过代码更改tvc.title

在上面的片段中,导航栏背景颜色需要通过代码设置(倒数第二行),因为故事板导航栏背景颜色设置不会改变它所说的内容。导航栏背景颜色保持白色(默认)。 tvc.title 正确更改。

但是,当我如下更改我的代码时,导航栏背景颜色会根据情节提要选择根据需要更改,但现在 tvc.title 无法通过代码设置。

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let tvc = storyboard.instantiateViewController(withIdentifier: "tvcID") as! MyTableViewController
tvc.title = "My tableview title" // NOW THIS DOESN'T WORK ANYMORE
let nc = storyboard.instantiateViewController(withIdentifier: "ncID") as! UINavigationController
// nc.navigationBar.backgroundColor = UIColor.blue // NOT REQUIRED ANYMORE
self.present(nc, animated: true, completion: nil)

我的印象是我在这里缺少一些基本的东西。

我想通过代码更改这两个属性。

【问题讨论】:

【参考方案1】:

如果您的故事板具有这样的结构:

UINavigationController --> MyTableViewController

你可以像这样实例化MyTableViewController

guard let navController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as? UINavigationController else  return 
guard let tvc = navController.viewControllers.first as? MyTableViewController else  return 
tvc.title = "Test title"
navController.navigationBar.barTintColor = UIColor.green

【讨论】:

就是这样! navController.viewControllers.first 是缺失的部分。非常感谢!

以上是关于嵌入式 tableview 的故事板背景颜色属性不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

XCode 8 不正确的背景颜色 - 故事板更新的颜色空间

iOS UISearchDisplayController 防止 tableview 改变背景颜色(背景保持灰色)

带有故事板的自定义静态 TableView - 单元格背景

如何更改背景选择的颜色故事板静态单元格

将故事板 UIImageView 更改为具有背景颜色的自己的类

iOS 7 - 故事板。为啥无法设置 tableViewCell 选择颜色