feat: 同步dev分支并保留当前修改
This commit is contained in:
@@ -19,7 +19,7 @@ import {
|
||||
} from 'react-native';
|
||||
import { PanGestureHandler, State } from 'react-native-gesture-handler';
|
||||
import type { PanGestureHandlerStateChangeEvent } from 'react-native-gesture-handler';
|
||||
import { SafeAreaView } from 'react-native-safe-area-context';
|
||||
import { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';
|
||||
import { MaterialCommunityIcons } from '@expo/vector-icons';
|
||||
import { useFocusEffect, useNavigation } from '@react-navigation/native';
|
||||
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
|
||||
@@ -50,8 +50,8 @@ const DEFAULT_SECTION_HEIGHT = 105;
|
||||
const WEEK_SELECTOR_HEIGHT = 44;
|
||||
// 星期标题行高度
|
||||
const HEADER_HEIGHT = 40;
|
||||
// 底部Tab栏高度(用于避让)
|
||||
const TAB_BAR_HEIGHT = 80;
|
||||
// 悬浮TabBar高度(TabBar高度64 + 浮动间距12*2 = 88)
|
||||
const FLOATING_TAB_BAR_HEIGHT = 88;
|
||||
|
||||
// 大节时间配置(左侧显示 1-6)
|
||||
const GROUPED_TIME_SLOTS: TimeSlot[] = [
|
||||
@@ -150,6 +150,7 @@ export const ScheduleScreen: React.FC = () => {
|
||||
const navigation = useNavigation<NativeStackNavigationProp<ScheduleStackParamList>>();
|
||||
// 使用响应式 hook 检测屏幕尺寸
|
||||
const { width: screenWidth, height: screenHeight, isMobile, platform } = useResponsive();
|
||||
const insets = useSafeAreaInsets();
|
||||
const isWeb = platform.isWeb;
|
||||
const [currentWeek, setCurrentWeek] = useState(INITIAL_WEEK);
|
||||
const [courses, setCourses] = useState<Course[]>([]);
|
||||
@@ -166,18 +167,19 @@ export const ScheduleScreen: React.FC = () => {
|
||||
}, [screenWidth, isWeb]);
|
||||
|
||||
// 动态计算每节课的高度
|
||||
// 手机端:第六节课底部刚好跟底部导航栏持平(可用高度 = 屏幕高度 - 周选择器 - 星期标题 - 底部Tab栏)
|
||||
// 手机端:第六节课底部刚好在悬浮TabBar上方(可用高度 = 屏幕高度 - 周选择器 - 星期标题 - 悬浮TabBar - 安全区域)
|
||||
// 电脑端:第六节课刚好填到底部(可用高度 = 屏幕高度 - 周选择器 - 星期标题)
|
||||
const sectionHeight = useMemo((): number => {
|
||||
const totalHeaderHeight = WEEK_SELECTOR_HEIGHT + HEADER_HEIGHT;
|
||||
const bottomOffset = isMobile ? TAB_BAR_HEIGHT : 0;
|
||||
// 悬浮TabBar高度 + 安全区域底部
|
||||
const bottomOffset = isMobile ? FLOATING_TAB_BAR_HEIGHT + insets.bottom : 0;
|
||||
// 可用高度 = 屏幕高度 - 顶部区域 - 底部偏移
|
||||
const availableHeight = screenHeight - totalHeaderHeight - bottomOffset;
|
||||
// 6节课,每节课高度 = 可用高度 / 6
|
||||
const calculatedHeight = Math.floor(availableHeight / 6);
|
||||
// 确保高度不低于默认值
|
||||
return Math.max(DEFAULT_SECTION_HEIGHT, calculatedHeight);
|
||||
}, [screenHeight, isMobile]);
|
||||
}, [screenHeight, isMobile, insets.bottom]);
|
||||
const [isAddModalVisible, setIsAddModalVisible] = useState(false);
|
||||
const [pendingDay, setPendingDay] = useState<number>(0);
|
||||
const [pendingMergedSection, setPendingMergedSection] = useState<number>(1);
|
||||
@@ -718,7 +720,7 @@ export const ScheduleScreen: React.FC = () => {
|
||||
};
|
||||
|
||||
return (
|
||||
<SafeAreaView style={styles.container} edges={['top', 'bottom']}>
|
||||
<SafeAreaView style={styles.container} edges={['top']}>
|
||||
<StatusBar barStyle="light-content" backgroundColor={colors.primary.main} />
|
||||
|
||||
{/* 周选择器 */}
|
||||
|
||||
Reference in New Issue
Block a user