В настоящее время я пытаюсь использовать <SectionList> внутри классического <View>, все мои данные отформатированы, список отображается правильно и действия моего элемента работают.
Проблема в том, что когда я нахожусь в верхней части списка разделов, область, доступная для запуска прокрутки, на самом деле очень мала (примерно 100 пикселей от верхней части списка). Однако, как только я прокручиваю немного вниз из этой области, весь список становится прокручиваемым и работает так, как задумано, пока я не вернусь к началу.
В моем родительском представлении есть flex: 1, а также мой список разделов
Среда
Рабочая среда: MacOS Sierra 10.13.3
Экспо-версия: 23.0
Версия React Native: 0.50
Реакция: 16.0
Использование моделирования iPhone 8
На Android нет проблем
Действия по воспроизведению
Классическое создание списка разделов внутри представления
Ожидаемое поведение
Прокрутка должна запускаться из любого места в SectionList.
Фактическое поведение
Когда SectionList находится наверху, прокрутка срабатывает только внутри небольшой области (около 100 пикселей от верха списка).
Код моего списка разделов:
<View style = {{ flex: 1 }}>
<SectionList
style = {styles.openSectionList} // flex: 1
scrollEnabled
stickySectionHeadersEnabled
sections = {this.sections}
keyExtractor = {item => item["@id"]}
removeClippedSubviews
renderSectionHeader = {({ section }) => (
<TouchableHighlight
onPress = {() => this.onSectionHeaderPressRef(section.index)}
activeOpacity = {0.65}
underlayColor = "rgba(0, 0, 0, 0.2)"
style = {styles.sectionHeader}
>
<View style = {styles.categoryContentContainer}>
<View style = {styles.firstPartContent}>
<Text style = {styles.categoryHeaderText}>
{section.title === "Autres"
? "Mes produits"
: section.title}{" "}
</Text>
{section.nbItems - section.nbItemsSelected === 0 ? (
<CheckBox
label = ""
checked
checkboxStyle = {styles.checkbox}
checkboxContainer = {styles.checkboxContainer}
/>
) : (
<Text
style = {[
styles.categoryHeaderText,
{ color: Colors.contrastColor },
]}
>
({section.nbItems - section.nbItemsSelected})
</Text>
)}
</View>
<Image
source = {require("../../../assets/common/chevron.png")}
style = {
section.index === this.state.currentCategoryOpen
? styles.categoryChevronOpen
: styles.categoryChevronClosed
}
/>
</View>
</TouchableHighlight>
)}
renderItem = {({ item }) =>
this.state.currentCategoryOpen === item.categoryIndex ? (
<ShoppingListProduct
key = {item["@id"]}
ingredient = {item}
updateIngredient = {this.updateIngredientListRef}
onLongPress = {this.itemLongPressedRef}
/>
) : null}
/>
</View>
GIF с фактическим поведением (я пытаюсь прокручивать каждый раз, когда курсор перемещается), где мы видим, что прокрутка срабатывает только тогда, когда я нахожусь выше определенной высоты.
Любая помощь будет принята с благодарностью, поскольку я не знаю, является ли это ошибкой и / или я неправильно реализую компонент.
Заранее благодарю.
@ Ленивый У меня была такая же или очень похожая проблема. Этот баг был только на iOS, Android работал отлично. После долгих проб и ошибок я обнаружил, что (вероятным) виновником на самом деле был stickySectionHeadersEnabled. При установке false все работает. Имейте в виду, что в iOS он включен по умолчанию. Попробую приготовить минимальную репродукцию.
@Clonescody у вас есть где-нибудь минимальный рабочий пример этой ошибки? Может на snake.expo.io?
@szalski Нет, к сожалению, это была старая версия моего приложения, и мы все переработали несколько месяцев назад. Извините за поздний ответ, надеюсь, вы сможете исправить свою проблему



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я добавил marginBottom к SectionList с равным объемом пространства, занимаемым View сверху, чтобы выровнять площадь.
кто-то спросил меня по электронной почте, чтобы я мог добавить его здесь, насколько я помню, это была проблема с расположением / смешиванием компонентов.
Я не могу точно вспомнить, но в итоге я получил этот код (содержимое моей страницы меняется, поэтому он установлен как переменная)
// render method
component = ( <SectionList
style = {styles.openSectionList} // flex: 1, height: "100%"
scrollEnabled
stickySectionHeadersEnabled
sections = {this.sections}
bounces = {false}
keyExtractor = {item =>
item["@id"] === undefined ? item.userIngredient : item["@id"]
}
getItemLayout = {this.getItemLayout}
renderSectionHeader = {this.renderSectionListHeaderRef}
renderItem = {this.renderSectionListItemRef}
/> )
return (
<View style = {{ flex: 1 }}>
{component}
</View>
)
Так что да, следите за тем, где определен ваш список разделов и сколько у него родителей, я думаю, что для этого нужен только один
Надеюсь это поможет.
Я смог исправить свою, добавив эту опору в список разделов
stickySectionHeadersEnabled = {false}
Вы нашли решение этого?