ios - 登录后我的 UI 视图搞砸了(ios swift 5)
问题描述
我创建了一个非常简单的登录页面,当它们匹配时,它将转到主页。但是当它进入主屏幕时有点混乱。图片如下:
如果我将初始视图放在主屏幕视图中,它将按预期工作,如下所示:
这是我的简单登录代码:
@IBAction func LoginTapped(_ sender: Any) {
let id = idTxtfield.text!.trimmingCharacters(in: .whitespacesAndNewlines)
let password = passwordTxtfield.text!.trimmingCharacters(in: .whitespacesAndNewlines)
if id == "ID" && password == "Password" {
let HomeScreenVC = self.storyboard?.instantiateViewController(identifier: "HomeScreenVC") as! HomeScreenVC
self.navigationController?.pushViewController(HomeScreenVC, animated: true)
// make it as root view
self.view.window?.rootViewController = HomeScreenVC
self.view.window?.makeKeyAndVisible()
}
else {
print("wrong password")
}
}
我在这里做错了吗?任何帮助将不胜感激谢谢
解决方案
您的代码中有一些问题,最重要的是您正在推送主视图控制器,同时还将其设置为根视图控制器。你不应该两者都做,这可能就是你的 UI 看起来一团糟的原因。
如果你想简单地将它推到屏幕上,只需使用:
navigationController?.pushViewController(homeViewController, animated: true)
但是如果你想彻底改变根视图控制器,那么你需要访问你的应用程序窗口并设置新的根视图控制器(有或没有动画)。假设您的应用程序中只有一个窗口,您可以像这样访问它:
UIApplication.shared.windows.first(where: { $0.isKeyWindow })
此外,对属性或方法名称使用小写驼峰形式,对结构、枚举或类名称使用大写驼峰形式始终是一个好习惯。
所以最后,你的didTapLogin()
方法会变成:
@IBAction func didTapLogin() {
guard let username = usernameTextField.text, let password = passwordTextField.text, username == "some_username", password == "some_password" else {
// Wrong password
return
}
guard let mainWindow = UIApplication.shared.windows.first(where: { $0.isKeyWindow }) else { return }
let homeViewController = storyboard!.instantiateViewController(identifier: "HomeScreenVC") as! HomeScreenVC
mainWindow.rootViewController = homeViewController
UIView.transition(with: mainWindow, duration: 1.0, options: .transitionCrossDissolve, animations: nil, completion: nil)
}
推荐阅读
- c# - How to add comboboxitem to combobox in style(WPF)
- javascript - 无法让 Web 组件在 codeandbox.io 中工作
- python - 将数据框列与具有不同形状数据框的单列上的另一个数据框合并
- javascript - Vue Router does not render correct component
- wso2 - WSO2: Add IBM MQ Correllation ID to message header
- java - 是否有更类似于 C 的方式在 Java 中打印 2D 数组?
- stack - WebAssembly: is there a way to debug/inspect the stack?
- android - 如何在android中为flowable创建观察者
- php - 以编程方式将用户从前端登录到 WordPress 后端时的问题
- javascript - Bootstrap 4 使用 fullPage.js 丢失内容