Плавающая кнопка (FAB) на React Native не останется сверху при визуализации компонента Modal, iOS Actionsheet, picker - PullRequest
6 голосов
/ 02 апреля 2019

Использование позиционированной кнопки absolute в компоненте более высокого порядка будет служить цели в обычных случаях использования, но когда визуализируется модальный / actionheet / picker и т. Д., Кнопка больше не остается сверху. enter image description here

Ответы [ 2 ]

5 голосов
/ 18 апреля 2019

К сожалению, это невозможно.Модалы, таблицы действий и оповещения отображаются в новом окне с более высоким уровнем , и поэтому они будут охватывать все.Вы также не можете вставить окно с более высоким уровнем, содержащим ваш FAB, потому что тогда сенсорные события не сделают его обычным представлением.Дополнительная документация по этому здесь .

Я бы также сказал, что вы не должны пытаться выполнить это.Выбор действий, такой как на скриншоте, должен полностью охватывать эту кнопку действия, и если вы представляете модал, тогда вы всегда можете попробовать добавить к нему новый FAB.

4 голосов
/ 23 апреля 2019

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это почти наверняка приведет к отклонению вашего приложения из магазина приложений, поэтому вам следует убедиться, что оно отображается только на бета-версии и внутренних сборках.Если вам нужно, чтобы Apple приняла его, я бы порекомендовал реализовать UIActionSheets и UIAlerts через React Native;Есть много хороших библиотек, которые симулируют модалы.

Вам нужно будет сделать это на родной стороне.Вы можете добавить следующий код в свой AppDelegate:

var debugWindow: UIWindow?

@objc func pressButton(_ sender: UIButton) {
    print("Do debugging here")
}

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    let screenSize = UIScreen.main.bounds

    let buttonController = UIViewController()
    let button = UIButton(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
    button.setTitle("+", for: .normal)
    button.backgroundColor = UIColor.blue
    button.addTarget(self, action: #selector(pressButton(_:)), for: .touchUpInside)
    button.layer.cornerRadius = 25
    button.layer.masksToBounds = true
    buttonController.view = button

    debugWindow = UIWindow.init(frame: CGRect(x: screenSize.width - 100, y: screenSize.height - 100, width: 50, height: 50))
    debugWindow!.rootViewController = buttonController
    debugWindow!.windowLevel = UIWindow.Level.alert + 1000;
    debugWindow!.makeKeyAndVisible()

    return true
}

Это создаст кнопку, которую можно будет нажимать независимо от того, какие модальности отображаются: iOS Simulator with floating debug button.

...