Lurker da molto tempo: poster per la prima volta!Modifica del frame di un inputAccessoryView in iOS 8
Ho un problema durante la ricreazione di una barra con un UITextView
come WhatsApp lo fa.
Sto usando una consuetudine UIView
sottoclasse, e pigramente istanziare su:
- (UIView *)inputAccessoryView
e il ritorno su SI:
- (BOOL)canBecomeFirstResponder
Ora, desidero modificare le dimensioni di inputAccessoryView
quando la dimensione di UITextView
aumenta. Su iOS 7, avrei semplicemente cambiato la dimensione della cornice di detta vista - e non la sua origine -, e quindi chiamata reloadInputViews
e avrebbe funzionato: la vista sarebbe stata spostata verso l'alto in modo che fosse completamente visibile sopra la tastiera.
Su iOS 8, tuttavia, questo non funziona. L'unico modo per farlo funzionare è anche quello di cambiare l'origine del frame su un valore negativo. Questo andrebbe bene, tranne che crea alcuni bug strani: ad esempio, il UIView
ritorna alla cornice 'originale' quando si immette qualsiasi testo.
C'è qualcosa che mi manca? Sono abbastanza sicuro che WhatsApp utilizzi inputAccessoryView
per il modo in cui ignorano la tastiera durante il trascinamento, solo nell'ultima versione dell'app.
Per favore fatemi sapere se potete darmi una mano! O se c'è qualche prova che vorresti che io corra!
Grazie! :)
BTW, ecco il codice che sto usando per aggiornare l'altezza del costume UIView chiamato composeBar
:
// ComposeBar frame size
CGRect frame = self.composeBar.frame;
frame.size.height += heightDifference;
frame.origin.y -= heightDifference;
self.composeBar.frame = frame;
[self.composeBar.textView reloadInputViews]; // Tried with this
[self reloadInputViews]; // and this
Edit: il codice sorgente completo è disponibile @https://github.com/manuelmenzella/SocketChat-iOS
stavo facendo esattamente la stessa cosa di te. Non penso che avrei pensato a questo. Stupefacente! – AdamPro13
Ho usato il tuo suggerimento in combinazione con - (CGSize) intrinsicContentSize e ora funziona. Solo quella riga di codice non funzionerà. –
E quindi chiamare -invalidateIntrinsicContentSize nella vista accessoria dopo aver apportato le modifiche. – kball