#ios #swift #login #firebase #firebaseui
#iOS #swift #аутентификация #firebase #firebaseui
Вопрос:
Я хотел бы иметь возможность размещать фоновое изображение за тремя кнопками входа (для Google, Facebook и электронной почты) на экране входа в FirebaseUI. FirebaseUI login — это комплексное решение для аутентификации для iOS, Android и Интернета. У меня проблемы с iOS.
На Github есть небольшой совет, но его недостаточно.
Сначала я инициализирую свой var customAuthPickerViewController : FIRAuthPickerViewController!
в верхней части файла ViewController.swift.
Тогда это функция в моем файле ViewController.swift, но она не работает. Когда я нажимаю кнопку выхода из системы, приложение завершает работу, и фоновое изображение никогда не отображается.
// Customize the sign-in screen to have the Bizzy Books icon/background image
func authPickerViewController(for authUI: FIRAuthUI) -> FIRAuthPickerViewController {
customAuthPickerViewController = authPickerViewController(for: authUI)
backgroundImage = UIImageView(image: UIImage(named: "bizzybooksbee"))
backgroundImage.contentMode = UIViewContentMode.scaleAspectFill
customAuthPickerViewController.view.addSubview(backgroundImage)
return customAuthPickerViewController
}
Фоновое изображение «bizzybooksbee» представляет собой универсальный набор изображений с 1x, 2x и 3x изображениями, уже загруженными в мою папку Assets.xcassets.
Вот изображение того, как выглядит экран входа в систему, без попыток реализовать фоновое изображение.
ОБНОВЛЕНИЕ: я могу отобразить изображение с помощью кода, который я привел в комментариях ниже, но оно отображается поверх кнопок входа, как на рисунке ниже.
Вот изображение «иерархии» с помощью Джеффри:
Комментарии:
1. Я успешно добавил изображение, но теперь изображение находится поверх кнопок, поэтому теперь мой вопрос в том, как мне получить изображение за кнопками.
2. То, что я сделал, чтобы отобразить изображение, подробно описано в моем уточненном запросе здесь . Вместо того, чтобы использовать функцию authPickerViewController, я просто добавил следующие строки в свою функцию login () перед представлением authViewController:
3.
let width = UIScreen.main.bounds.size.width let height = UIScreen.main.bounds.size.height let imageViewBackground = UIImageView(frame: CGRect(x: 0, y: 0, width: width, height: height)) imageViewBackground.image = UIImage(named: "bizzybooksbee") // you can change the content mode: imageViewBackground.contentMode = UIViewContentMode.scaleAspectFill authViewController?.view.insertSubview(imageViewBackground, at: 1)
4. Вы пытались вставить ImageView в: 0? authViewController? .view.insertSubview(imageViewBackground, at: 0)
5. @JeffreyBergier Да, я это сделал, а затем изображение скрывается за UITableView (так мне сказали) — по крайней мере, вы не можете видеть изображение, когда оно находится в позиции 0. Тем не менее, спасибо за попытку!
Ответ №1:
Вот решение!
Удалите ненужный мусор, который не работает, из ViewController.swift:
func authPickerViewController(for authUI: FIRAuthUI) -> FIRAuthPickerViewController {
customAuthPickerViewController = authPickerViewController(for: authUI)
backgroundImage = UIImageView(image: UIImage(named: "bizzybooksbee"))
backgroundImage.contentMode = UIViewContentMode.scaleAspectFill
customAuthPickerViewController.view.addSubview(backgroundImage)
return customAuthPickerViewController
}
Создайте «подкласс» .swift FIRAuthPickerViewController
, который вы можете назвать как угодно, и добавьте туда свое фоновое изображение / настройку:
import UIKit
import FirebaseAuthUI
class BizzyAuthViewController: FIRAuthPickerViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let width = UIScreen.main.bounds.size.width
let height = UIScreen.main.bounds.size.height
let imageViewBackground = UIImageView(frame: CGRect(x: 0, y: 0, width: width, height: height))
imageViewBackground.image = UIImage(named: "bizzybooksbee")
// you can change the content mode:
imageViewBackground.contentMode = UIViewContentMode.scaleAspectFill
view.insertSubview(imageViewBackground, at: 0)
}}
В вашем ViewController.swift
(или как вы его называете) разделе, в котором вы входите в систему, измените authViewController на равный вашему новому подклассу, добавьте строку для контроллера навигации и передайте ее в self.present:
let authViewController = BizzyAuthViewController(authUI: authUI!)
let navc = UINavigationController(rootViewController: authViewController)
self.present(navc, animated: true, completion: nil)
Я также сделал учебник на YouTube, в котором подробно показано, как это сделать.
Комментарии:
1. Вы случайно не знаете, как изменить фоновое изображение экрана электронной почты? Он использует UITableView, поэтому просто изменить фоновое изображение недостаточно.
2. Я думаю, что экран электронной почты может быть немного сложнее сделать. Я бы зарегистрировался на веб-сайте ввода-вывода code mentor.
3. он не работает для «func emailEntryViewController (forAuthUI authUI: FUIAuth) -> FUIEmailEntryViewController {«. Есть ли какой-либо способ его реализовать
4. Возможно, вам также придется сделать это: переопределить init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, authUI: FUIAuth?) { super.init(nibName: nil, bundle: Bundle.main, authUI: authUI!) }
5. Согласно последней версии пользовательского интерфейса Firebase (5.x), следует подкласс FUIAuthPickerViewController, а не FIRAuthPickerViewController