I am using a toolbar in the inputAccessoryView property of a textView. When the keyboard shows, it displays the toolbar as expected. When the device is rotated I want to remove the toolbar. I tried:
myTextView.inputAccessoryView.hidden = !layoutIsPortrait;
This does hide the toolbar, but leaves the outline of the taller keyboard behind. The keyboard is apparently still sized to fit the toolbar. It looks bad and interferes with touch events of underlying responders.
myTextView.inputAccessoryView = nil;
Works only if I resignFirstResponder, then becomeFirstResponder again. This is not acceptable. I lose the cursor placement and content of the textView, keyboard flashes out and back.
[myTextView.inputAccessoryView removefromSuperview];
Does nothing at all. I saved a reference to the toolbar in a iVar and addressed that instead,
[myIvarReference removeFromSuperview];
That works, but again the taller outline of the keyboard is faintly visible. This time it does not interfere with touches of other views. So now this is a working solution but visually unacceptable. What else can I try to show and hide the inputAccessoryView at will?
Screenshot- the faint line above the keyboard is remnant of the removed toolbar
This removes the toolbar from the view and reloads the view. This way you don't need to call resignFirstResponder and becomeFirstResponder. Additionally, this will still keep your cursor placement and content.
For me Eric's solution never actually reset the frame or the touch areas. Presumably it's a bug with how Apple handles things. However, I found a workaround that solved the problem for me. When I set a new inputAccessoryView without a frame, reloadInputViews worked fine:
None of the answers above were working for me and reloadInputViews was causing weird issues. Eventually I got it to show and hide and have touches passthrough by doing:
Hide it:
Show it:
Based on Eric Appel's answer:
Further modify:
This should hide InputAccessoryView even when the keyboard is resigned.
Oddly enough, none of these approaches worked in my case.
I have a searchcontroller which pops up a standard Apple iOS keyboard if a particular search scope is selected, and a custom keyboard view with a collection view as the input field in cases of other scopes being selected. In both cases, an undesired accessory view was drawn on the screen when the input view was displayed.
So,
and various combinations thereof etc, etc.
What did work was to delete to individual accessory items from the accessory view:
Xamarin code is