In this lesson, you will learn how to normalize the inconsistent default styling behaviors between Android and iOS to ensure your app looks identical across both platforms.
When you build a React Native app, you’ll notice that many components have "opinionated" defaults. For example, a <Button /> on iOS uses a native system font and blue tint, while the Android version looks completely different, often following Material Design guidelines. If you leave these defaults as-is, your UI will feel fragmented.
The "Default Gap" Problem
The gap between platforms often manifests as:
- Shadows: iOS uses
shadowColor,shadowOffset, andshadowOpacity, while Android relies on theelevationproperty. - Font Weights:
boldfonts often render differently across OS versions due to how system fonts are bundled. - Padding and Margins: Default spacing on system elements like
TextInputscan vary by several pixels.
The Strategy: Normalization
To bridge this gap, you should avoid relying on "default" styles for complex UI elements. Instead, create a standardized style object. By using the Platform module, you can inject the specific properties needed to force parity.
import { Platform, StyleSheet } from 'react-native';
const styles = StyleSheet.create({
container: {
// Standardize shadows for parity
...Platform.select({
ios: {
shadowColor: '#000',
shadowOffset: { width: 0, height: 2 },
shadowOpacity: 0.25,
},
android: {
elevation: 5,
},
}),
backgroundColor: '#FFF',
borderRadius: 8,
},
});
Why this matters
By explicitly defining these properties, you stop the operating system from "guessing" how your component should look. This is especially important for containers like Cards or Floating Action Buttons, where the visual "weight" (shadows) significantly impacts the user's perception of the app's hierarchy.
When you standardize these values in your centralized style files (which we discussed in Lesson 25), you ensure that your design system remains the source of truth, rather than the platform's default SDK behaviors.
Key Takeaway: Never rely on component default styles for cross-platform UI; use Platform.select to explicitly define styles like elevation and shadows so your design remains consistent regardless of the underlying OS.