버튼의 bottom 좌표는 iOS냐 안드로이드냐에 따라 다릅니다. 그리고 홈 버튼이 없는 iPhone X 이상 기종인지 아닌지에 따라 또 달라집니다. 안드로이드에서는 bottom 값을 탭 바 높이의 1/2 크기로 지정하고, iOS에서는 useSafeAreaInsets로 하단 여백 크기를 알아낸 뒤 여백 크기만큼 빼주고 여기서 4를 더 빼줍니다. 이렇게 하면 버튼을 탭 바 테두리에 걸칠 수 있습니다.

    추가로 가로 위치를 설정하는 과정에서 left: 50%로 중앙에 위치시킨 다음 현재 버튼 크기의 1/2만큼 좌측으로 이동하도록 transform 스타일을 적용해줬습니다. 이 버튼은 하단 탭보다 위 레이어에 보여야 하기 때문에 zIndex 값을 5로 설정했습니다.

    컴포넌트를 다 작성했으면 MainTab에서 다음과 같이 사용해보세요.

    screens/MainTab.js

    import React from 'react';
    import {createBottomTabNavigator} from '@react-navigation/bottom-tabs';
    import HomeStack from './HomeStack';
    import MyProfileStack from './MyProfileStack';
    import Icon from 'react-native-vector-icons/MaterialIcons';
    import CameraButton from '../components/CameraButton';
    import {StyleSheet, View} from 'react-native';
    
    const Tab = createBottomTabNavigator();
    
    function MainTab() {
      return (
        <>
          <View style={styles.block}>
            <Tab.Navigator
              screenOptions={{
                headerShown: false,
                tabBarShowLabel: false,
                tabBarActiveTintColor: '#6200ee',
              }}>
              <Tab.Screen
                name="HomeStack"
                component={HomeStack}
                options={{
                  tabBarIcon: ({color}) => (
                    <Icon name="home" size={24} color={color} />
                  ),
                }}
              />
              <Tab.Screen
                name="MyProfileStack"
                component={MyProfileStack}
                options={{
                  tabBarIcon: ({color}) => (
                    <Icon name="person" size={24} color={color} />
                  ),
                }}
              />
            </Tab.Navigator>
          </View>
          <CameraButton />
        </>
      );
    }
    
    const styles = StyleSheet.create({
      block: {
        flex: 1,
        zIndex: 0,
      },
    });
    
    export default MainTab;

    이 코드에서는 CameraButton이 하단 탭보다 더 위 레이어에 보여지게끔 기존 코드를 View로 한번 감싸서 zIndex0으로 설정하고, Fragment로 한 번 더 감싸서 View 코드 하단에 CameraButton을 넣었습니다.

    앞에서 확인한 그림 9-2처럼 버튼이 탭 바 위에 잘 나타났나요?

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.