KeyboardKit defines a bunch of keyboard-related colors.🌈
While you can use any native
Color you like in your custom keyboards, having access to keyboard-specific colors simplifies creating custom keyboards that look more native.
KeyboardKit provides some keyboard-specific
Color extensions, like standard colors for buttons, backgrounds, etc. Some of these colors have built-in logic to work around system limitations.
The raw colors aim to match the iOS system design as closely as possible, for instance:
Color.standardButtonBackground Color.standardButtonBackgroundForDarkAppearance Color.standardDarkButtonBackground Color.standardDarkButtonBackgroundForDarkAppearance Color.standardKeyboardBackground Color.standardKeyboardBackgroundForDarkAppearance
The colors without
ForDarkAppearance suffix support both light and dark mode, while the ones with the prefix are meant to be used for dark appearance keyboards in light mode.
The contextual colors take a
KeyboardContext instance and will vary the result based on the context:
Color.standardButtonBackground(for: context) Color.standardDarkButtonBackground(for: context)
Using these contextual colors mean you don’t have to check if the keyboard is in dark or light mode, which device that is currently used, etc. It’s recommended to use these instead of the raw values.
Important about keyboards and colors
If you take a look at some of these keyboard colors, you will notice that some are semi-transparent. The reason for this is to work around a system limitation (bug) in iOS.
Keyboards get invalid color scheme information when they are used with dark appearance text fields. iOS will then tell the keyboard that is uses a dark color scheme, even if the system scheme is light.
Since dark appearance keyboards in light mode look different from keyboards in dark mode, being unable to detect the real appearance and scheme makes it difficult to style the keyboard correctly.
To work around this, some colors use an internal color set that has semi-transparent white colors with an opacity that aims to look good in both light and dark mode.
The information on this page is shortened to be easier to overview. For more information about this feature, code samples, etc., please see the online documentation.