Похоже, что вы отправляете в представлении настроек здесь:
self.homeController?.displayController(menuOption: menuOption, view: self.settingsView)
Но я не вижу, где вы фактически назначаете это представление контроллеру представления:
func displayController(menuOption: MenuOption, view: UIView) {
//[...]
//What is HomeView?
selectionController.view.addSubview(HomeView(frame: view.frame))
//[...]
navigationController?.pushViewController(selectionController, animated: true)
}
Вы передаете HomeView в ViewController, а не переданное представление, и устанавливаете размер HomeView для рамки переданного представления (в данном случае, Настройки).
Я ожидал бы что-то вроде этого:
func displayController(menuOption: MenuOption, view: UIView) {
let selectionController = UIViewController()
selectionController.navigationItem.title = menuOption.name
selectionController.view.backgroundColor = Color.blue
selectionController.view.addSubview(view)
navigationController?.navigationBar.tintColor = UIColor.white
navigationController?.pushViewController(selectionController, animated: true)
}
Не зная, что делает HomeView, но предполагая, что у него есть какие-то другие вещи, которые вы хотите, возможно, переданное представление станет подпредставлением HomeView, тогда HomeView вернет то, что вы хотите.В этом случае:
selectionController.view.addSubview(HomeView(selectedView: view))
В этом случае HomeView должен внутренне определить размер своего кадра из переданного представления, поэтому параметр кадра становится ненужным.