Diese Antwort basiert auf JSQMessagesVie wController Version 7.3.
Hinweis: Der folgende Code enthält einige unsaubere Pragma-Anweisungen, um Compiler-Warnungen zu vermeiden. Der Code selbst ist eigentlich ganz einfach, wenn man über die Pragmas hinausgeht.
Dies scheint das Problem zu lösen, während die Symbolleiste weiterhin verschoben werden kann, wenn die Softwaretastatur angezeigt wird. Ich habe den folgenden Code in meiner JSQMessagesViewController Unterklasse:
- (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: Für Swift Benutzer sollte die folgenden Trick können Sie die private objc Methode aufrufen:
let constraint = perform(Selector(("toolbarBottomLayoutGuide"))).takeUnretainedValue() as! NSLayoutConstraint
constraint.priority = 999
Edit: Der Code Dadurch wird das contentInset der collectionView nicht aufgerufen, nachdem diese neue Einschränkung hinzugefügt wurde. Wenn die Chat-Ansicht mehr Nachrichten enthält, als auf den Bildschirm passen, wird die letzte Nachrichtenblase von der Eingabe-Toolbar verdeckt. Ich löste dies durch die Einsätze zu gewährleisten, indem Sie die folgenden Code in aktualisiert werden viewDidAppear viewDidLayoutSubviews:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
[self performSelector:@selector(jsq_updateCollectionViewInsets)];
#pragma clang diagnostic pop
Sorry, aber es ist nicht ganz klar, was Sie fragen, was Sie alles zu erreichen über versuchen? –
Wie Sie auf dem Screenshot sehen können, befindet sich die Tastatur am unteren Rand des iPhone X-Stimulators, anstatt dem Sicherheitsbereich zu folgen. –
Wahrscheinlich ein Bug mit JSQ. Wie Sie vielleicht wissen, ist es veraltet. Ein Versuch, es zu ersetzen, geht über https://github.com/MessageKit/MessageKit weiter. –