One possible way to solve this is to:
Create a unit with a Boolean reference (or add to an existing unit) that is exposed publicly, e.g:
unit iOSPatch;
interface
var
DisableAutoCapitalization: Boolean;
implementation
end.
Create a copy of source\fmx\FMX.Platform.iOS.pas and put it in the project compile path (such as the project folder)
Modify the copy of FMX.Platform.iOS by adding the unit name from the first step to the implementation uses clause, e.g.:
implementation
uses
iOSPatch,
System.Classes, System.SysUtils, System.Types, System.UITypes, System.TypInfo, System.Messaging, System.RTLConsts,
// ... rest of uses clause snipped
Modify the TFMXViewBase.autocapitalizationType method to look like this:
function TFMXViewBase.autocapitalizationType: UITextAutocapitalizationType;
begin
if DisableAutoCapitalization or FPassword or not (FKeyboardType in [TVirtualKeyboardType.Default, TVirtualKeyboardType.Alphabet, TVirtualKeyboardType.NamePhonePad]) then
Result := UITextAutocapitalizationTypeNone
else
Result := UITextAutocapitalizationTypeSentences;
end;
Use the OnEnter event of every edit to set DisableAutoCapitalization to True/False depending on your needs
Alternatively, if you want it to apply to all edits regardless, you could modify TFMXViewBase.autocapitalizationType to set Result to UITextAutocapitalizationTypeNone and ignore the first step.
Unfortunately I can't test this right now as something has gone haywire with deployment on my machine
EDIT
I've managed to solve my deployment issue, and tested the code above, which works. Slight side-effect: the Shift button on the VK appears as "pressed" briefly