gpt4 book ai didi

ios - 以编程方式设置为 Root View Controller 时, View Controller 无法正确显示 subview

转载 作者:行者123 更新时间:2023-11-30 11:57:28 26 4
gpt4 key购买 nike

我一直通过在 loadView() 方法中设置自定义 View 来以编程方式构建 View Controller 。在将 AppDelegate 中的 Root View Controller 更改为指定的 View Controller 时,我注意到 View Controller 不会显示正确布局的 subview ,即使它显示了。使用 View 调试器,我看到 View 被视为位于 View 层次结构中,但无法找到它们,所以我最终得到了空白的 View Controller 。奇怪的是,当我从另一个 View Controller 呈现 View Controller 时,只有这样它才能正确布局并且所有 View 都是可见的。我的 View Controller 都遵循如下所示的相同创建。

class ViewController: UIViewController {


private var rootView: View? {
get { return self.viewIfLoaded as? View ?? .none }
set (view) { self.view = view }
}


required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}


init() {
super.init(nibName: nil, bundle: nil)
}


override func viewDidLoad() {
super.viewDidLoad()
}



override func loadView() {
self.rootView = View()
}

}

这是我为 View Controller 创建自定义 View 的方法

class View: UIView {

// Lazy declare views here

fileprivate var shouldSetupConstraints = true


override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupView()
}


override func updateConstraints() {
if(shouldSetupConstraints) {

// Adding constraints here

shouldSetupConstraints = false
}
super.updateConstraints()
}


func setupView() {

// Adding subviews here

}

}

这是我在 AppDelegate 中设置 Root View Controller 的方法

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

window = UIWindow(frame: UIScreen.main.bounds)
window?.backgroundColor = Palette.backgroundColor
window?.rootViewController = MyViewController()
window?.makeKeyAndVisible()
return true

}

我希望以编程方式布局的 View Controller 在设置为 Root View Controller 时能够正确显示,但 View 不可见或布局不正确。仅当 View Controller 由另一个 View Controller 呈现时,它们才能正确显示。

最佳答案

看起来此行为是由于未设置造成的
self.translatesAutoresizingMaskIntoConstraints = false
在我的自定义 View 中的 setupView() 中。

关于ios - 以编程方式设置为 Root View Controller 时, View Controller 无法正确显示 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47645004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com