Выравнивание представления повестки дня React-native-calendars (wix) нарушено

Недавно я начал использовать элемент управления календарем из следующего репо: https://github.com/wix/react-native-calendars Первоначально элемент управления календарем правильно выровнял все элементы, однако что-то, похоже, полностью нарушило выравнивание.

Выравнивание представления повестки дня React-native-calendars (wix) нарушено

Выше на этом изображении вы можете увидеть обратный порядок от возрастания к убыванию. Копаем глубже с инспектором элементов: Выравнивание представления повестки дня React-native-calendars (wix) нарушено

Я выполнил процесс исключения (я подумал, что это может быть связано с недавним обновлением React-Navigation 2x до 3x из-за того, что накладывающийся контейнер должен быть явно создан) Не повезло.

Я создал простейшую репродукцию задачи и откатился до React-Navigation 2x. К сожалению, это не решило проблему.

Некоторые источники прилагаются ниже:

App.js:

import React from 'react';
import AppNavigator from './navigation/AppNavigator';
export default class App extends React.Component {
  render() {
    return (
      <AppNavigator />
    );
  }
}

AppNavigator:

//#region imports
import { 
    createSwitchNavigator,
    createStackNavigator
} from 'react-navigation';

import { 
    HomeScreen, 
    SettingsScreen,
    AuthLoadingScreen, 
    SignInScreen
} from '../screens';
//#endregion
const appStack = createStackNavigator({
    Home: HomeScreen,
    Other: SettingsScreen
});
const authStack = createStackNavigator({
    SignIn: SignInScreen
});

export default createSwitchNavigator({
    AuthLoading: AuthLoadingScreen,
    App: appStack,
    Auth: authStack
}, { initialRouteName: 'AuthLoading'});

Домашний экран:

import React, {Component} from 'react';
import {StyleSheet, View, Text, AsyncStorage, Button} from 'react-native';
import Agenda from '../components/Agenda';

export default class HomeScreen extends Component{
    logout = async () => {
      const userToken = await AsyncStorage.removeItem('userToken');

      // This will switch to the App screen or Auth screen and this loading
      // screen will be unmounted and thrown away.
      this.props.navigation.navigate('Auth');
    }
    render(){
      return <Agenda/>;
    }
}

Повестка дня:

import React, { Component } from 'react';
import {
  Text,
  View,
  StyleSheet
} from 'react-native';
import {Agenda} from 'react-native-calendars';

export default class AgendaScreen extends Component {
  constructor(props) {
    super(props);
    this.state = {
      items: {}
    };
  }

  render() {
    return (
      <Agenda
        items = {this.state.items}
        loadItemsForMonth = {this.loadItems.bind(this)}
        selected = {'2017-05-16'}
        renderItem = {this.renderItem.bind(this)}
        renderEmptyDate = {this.renderEmptyDate.bind(this)}
        rowHasChanged = {this.rowHasChanged.bind(this)}
        // markingType = {'period'}
        // markedDates = {{
        //    '2017-05-08': {textColor: '#666'},
        //    '2017-05-09': {textColor: '#666'},
        //    '2017-05-14': {startingDay: true, endingDay: true, color: 'blue'},
        //    '2017-05-21': {startingDay: true, color: 'blue'},
        //    '2017-05-22': {endingDay: true, color: 'gray'},
        //    '2017-05-24': {startingDay: true, color: 'gray'},
        //    '2017-05-25': {color: 'gray'},
        //    '2017-05-26': {endingDay: true, color: 'gray'}}}
         // monthFormat = {'yyyy'}
         // theme = {{calendarBackground: 'red', agendaKnobColor: 'green'}}
        //renderDay = {(day, item) => (<Text>{day ? day.day: 'item'}</Text>)}
      />
    );
  }

  loadItems(day) {
    setTimeout(() => {
      for (let i = -15; i < 85; i++) {
        const time = day.timestamp + i * 24 * 60 * 60 * 1000;
        const strTime = this.timeToString(time);
        if (!this.state.items[strTime]) {
          this.state.items[strTime] = [];
          const numItems = Math.floor(Math.random() * 5);
          for (let j = 0; j < numItems; j++) {
            this.state.items[strTime].push({
              name: 'Item for ' + strTime,
              height: Math.max(50, Math.floor(Math.random() * 150))
            });
          }
        }
      }
      //console.info(this.state.items);
      const newItems = {};
      Object.keys(this.state.items).forEach(key => {newItems[key] = this.state.items[key];});
      this.setState({
        items: newItems
      });
    }, 1000);
    // console.info(`Load Items for ${day.year}-${day.month}`);
  }

  renderItem(item) {
    return (
      <View style = {[styles.item, {height: item.height}]}><Text>{item.name}</Text></View>
    );
  }

  renderEmptyDate() {
    return (
      <View style = {styles.emptyDate}><Text>This is empty date!</Text></View>
    );
  }

  rowHasChanged(r1, r2) {
    return r1.name !== r2.name;
  }

  timeToString(time) {
    const date = new Date(time);
    return date.toISOString().split('T')[0];
  }
}

const styles = StyleSheet.create({
  item: {
    backgroundColor: 'white',
    flex: 1,
    borderRadius: 5,
    padding: 10,
    marginRight: 10,
    marginTop: 17
  },
  emptyDate: {
    height: 15,
    flex:1,
    paddingTop: 30
  }
});

Приносим извинения по поводу качества кода, все это взято из образцов. Источник образца повестки дня: https://github.com/wix/react-native-calendars/blob/master/example/src/screens/agenda.js

Источник маршрутизатора: https://reactnavigation.org/docs/en/2.x/auth-flow.html

Любая помощь приветствуется.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
3
0
8 360
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хотя отвечать на свой вопрос - это социальное кощунство наравне с хвалением себе на публике, но если у кого-то еще есть эта проблема, не волнуйтесь и не напрягайте всю свою жизненную энергию.

Я сделал довольно много, чтобы попытаться диагностировать проблему, от создания пустых лесов, чтобы увидеть, сохраняется ли проблема (так и было).

Я решил в крайнем случае протестировать на телефоне коллеги (сюрприз-сюрприз, он правильно отображает).

Удаление приложения expo, переустановка и запуск с помощью команды expo start --clear, и работоспособность восстанавливается.

Другие вопросы по теме