Как сделать так, чтобы InputAccessoryView отображался над вкладками UITabBarViewController? - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть пользовательское представление, которое я использую как inputAccessoryView для моего tableViewController.

tableViewControlleris внутри tabBarViewController, который находится внутри контроллера навигации.

Мне удалось сделать так, чтобы пользовательский вид отображался правильно как inputAccessoryView, появляющийся внизу, и когда он сфокусирован, он поднимается вверх с помощью клавиатуры.

Моя проблема в том, что он скрывает мой tabBar, я искал, но не смог найти ничего, кроме вопроса с давностью 2 года без ответа.Я хочу, чтобы мой вид отображался над tabBar, подобно музыкальному приложению, когда воспроизводится песня, а песня, кнопка воспроизведения и следующая кнопка отображаются над tabBar, не скрывая его.

с помощьюswift 4.2, Xcode 10.1, iOS 11 target, тестирование на iOS 12.1 и 12.1.1

1 Ответ

0 голосов
/ 21 января 2019

Я смог добиться этого эффекта и создал фреймворк под названием AMKeyboardFrameTracker , чтобы сделать именно это

AMKeyboardFrameTracker.gif

, но сначалавам нужно понять, как inputAccessoryView работа

inputAccessoryView прикреплена к другому окну, называемому UITextEffectsWindow, это окно отображается в верхней части главного окна приложения

Основная функция использования inputAccessoryView - это эффект интерактивного отклонения клавиатуры для любого UIScrollView, потому что обычно вы не можете получить кадр клавиатуры из обратных вызовов уведомлений родной клавиатуры

Но с AMKeyboardFrameTracker я смогполучить кадр клавиатуры из inputAccessoryView's superview, наблюдая за его изменениями кадра, поэтому он по-прежнему использует inputAccessoryView, но с пустым представлением, которое не взаимодействует с пользователем

В есть примерGithub repo вы можете скачать его и попробовать

Примечание в примере приложения я использую обычный ViewController вместо TableViewControllerесли вы хотите использовать TableViewController вы все еще можете достичь этого, добавив свой CustomView в navigationController's view

...