【发布时间】:2020-10-01 13:05:31
【问题描述】:
我正在使用 Firebase 预构建的 UI 构建身份验证系统,并且我想自定义 UI 以适应程序。假设我想将背景颜色设置为黑色并更改按钮的角半径,有什么办法可以做到吗?我尝试对authPickerViewController 进行子分类,但不知何故它不起作用。我进行了一些搜索,但也找不到与此相关的任何教程或最近的问题。
这是我的 MainViewController 中的内容
class LoginViewController: UIViewController, FUIAuthDelegate{
override func viewDidLoad() {
super.viewDidLoad()
let authUI = FUIAuth.defaultAuthUI()
authUI?.delegate = self
let providers: [FUIAuthProvider] = [
FUIEmailAuth(),
FUIGoogleAuth(),
FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()!)]
authUI?.providers = providers
let authViewController = authUI?.authViewController()
authViewController!.modalPresentationStyle = .fullScreen
authViewController!.setNavigationBarHidden(true, animated: false)
self.present(authViewController!, animated: false, completion: nil)
}
func application(_ app: UIApplication, open url: URL,
options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication]
if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication as? String) ?? false {
return true
}
return false
}
}
这是我创建的子类:
class FUICustomAuthPickerViewController: FUIAuthPickerViewController,FUIAuthDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .black
}
func authPickerViewController(forAuthUI authUI: FUIAuth) -> FUIAuthPickerViewController {
return FUICustomAuthPickerViewController(nibName: "FUICustomAuthPickerViewController",
bundle: Bundle.main,
authUI: authUI)
}
}
在Firebase documentation for customization 上,他们说:
您可以通过继承 FirebaseUI 的视图控制器并在 FUIAuth 的委托方法中指定它们来自定义登录屏幕。
我是初学者,我该怎么做?
已编辑:
因此,按照this link 上的说明,我设法通过创建FUIAuthDelegate 的扩展来将内容添加到预构建的 UI。
extension LoginViewController:FUIAuthDelegate {
func application(_ app: UIApplication, open url: URL,
options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication]
if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication as? String) ?? false {
return true
}
return false
}
func authPickerViewController(forAuthUI authUI: FUIAuth) -> FUIAuthPickerViewController {
let vc = FUIAuthPickerViewController(authUI: authUI)
let view = UIView(frame: .zero)
view.backgroundColor = .black
view.translatesAutoresizingMaskIntoConstraints = false
vc.view.addSubview(view)
NSLayoutConstraint.activate([
view.heightAnchor.constraint(equalTo: vc.view.heightAnchor, multiplier: 1),
view.widthAnchor.constraint(equalTo: vc.view.widthAnchor, multiplier: 1)])
return vc
}
}
原来子类不是必须的。但是,我似乎无法将我创建的这个视图作为背景,它要么覆盖所有内容,要么根本不覆盖任何内容。我尝试直接更改视图的背景颜色,但没有奏效。有人知道怎么做吗?
【问题讨论】:
-
请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。
-
@halfer 是的,先生!表示感谢。
-
@TimmyMi - 查看 FirebaseUI-iOS 存储库以获取完整示例,该示例展示了如何自定义不同的视图控制器:github.com/firebase/FirebaseUI-iOS/tree/master/samples/swift/…。另外,我想知道你是否真的想使用
black作为背景颜色,或者更确切地说支持浅色模式/深色模式 - 你能评论一下吗? -
@PeterFriese 我在这里以黑色为例,所以不用担心。无论如何,感谢您的回购,我会检查并回复您。
-
@PeterFriese 你介意更详细地解释一下吗?我如何在我的项目中实现这一点?非常感谢!
标签: swift firebase-authentication firebaseui