Ta odpowiedź jest oparta na JSQMessagesVie Wersja wController 7.3.
Uwaga: Poniższy kod zawiera pewne nieuporządkowane dyrektywy, aby uniknąć ostrzeżeń kompilatora. Sam kod jest w rzeczywistości całkiem prosty, gdy zobaczysz poza pragmami.
Wydaje się, że to rozwiązuje problem, jednocześnie umożliwiając przeniesienie paska narzędzi po wyświetleniu klawiatury programowej. I dodaje następujący kod w moim JSQMessagesViewController podklasy:
- (void)viewDidLoad {
[...]
// To keep the toolbar inside the safe area on iPhone X, we need to install a new constraint that has higher priority than the one
// JSQMessagesViewController manipulates when adjusting for the keyboard. The `toolbarBottomLayoutGuide` is a private property in our
// superclass, so it's not straightforward to access it...
if (@available(iOS 11.0, *)) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
NSLayoutConstraint *constraint = [self performSelector:@selector(toolbarBottomLayoutGuide)];
#pragma clang diagnostic pop
constraint.priority = 999;
[self.inputToolbar.bottomAnchor constraintLessThanOrEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor].active = YES;
}
Edit: Dla użytkowników Swift następujący trik powinien pozwalają wywołać prywatną metodę objc:
let constraint = perform(Selector(("toolbarBottomLayoutGuide"))).takeUnretainedValue() as! NSLayoutConstraint
constraint.priority = 999
Edit: Kod która dostosowuje zawartośćInformacja kolekcji collectionView nie jest wywoływana po dodaniu nowego ograniczenia, więc jeśli widok czatu zawiera więcej wiadomości niż pasuje do ekranu, ostatni dymek jest zasłonięty przez pasek narzędzi wprowadzania. Rozwiązałem to przez zapewnienie wypustki są aktualizowane dodając następujący kod w viewDidAppear viewDidLayoutSubviews:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
[self performSelector:@selector(jsq_updateCollectionViewInsets)];
#pragma clang diagnostic pop
Niestety ale to nie jest bardzo jasne, o co pytasz, co starasz się osiągnąć ponad wszystko? –
Jak widać na zrzucie ekranu, klawiatura znajduje się na spodzie stymulatora iphone X, zamiast podążać za przewodnikiem po obszarze bezpiecznym. –
Prawdopodobnie błąd z JSQ. Jak pewnie wiesz, został przestarzały. Próbuje go zastąpić na https://github.com/MessageKit/MessageKit –