Как я могу добавить фоновое изображение для входа в FirebaseUI для iOS?

#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