Я использовал свой iPhone для тестирования и только начал тестировать свое приложение на других продуктах Apple.
Все работает нормально на iPad Air M1, iPhone 15 Pro, iPhone 15 Pro Max, iPhone 13, iPhone XS (симулятор) и iPhone 11 Pro (симулятор). Однако когда я попытался показать свое приложение члену семьи на iPhone 11, я столкнулся с проблемой.
Описание проблемы:Мое приложение берет все фотографии из встроенной галереи iPhone, затем вы можете отсортировать их с помощью специальных фильтров и удалить изображения. Просто похоже на родную галерею. (При необходимости я могу добавить фотографии позже) Вы можете просто прокручивать галерею, проводя пальцем вверх и вниз. Вы можете нажать кнопку выбора и начать выбирать изображения для удаления.
Недавно я добавил функцию перетаскивания нескольких изображений для выбора. Это делает его более похожим на родной интерфейс iOS, устраняя необходимость нажимать на каждое изображение по отдельности.
Однако на iPhone 11 в тот момент, когда вы открываете приложение, вы не можете прокручивать . Прокрутка полностью заблокирована. Вы по-прежнему можете выбирать изображения, нажимая или перетаскивая их, так что это не проблема сенсорной области. Та же проблема сохраняется и в симуляторе iPhone 11.
И я думаю, что нашел проблемную часть в своем (к сожалению, беспорядочном) файле ContentView.swift;
Код: Выделить всё
private var mediaGridView: some View {
ScrollView {
RefreshControl(coordinateSpace: .named("refresh")) {
await viewModel.refreshMediaItems()
}
LazyVGrid(columns: gridColumns, spacing: UIDevice.current.userInterfaceIdiom == .pad ? 12 : 4) {
let items = viewModel.filteredItems(typeFilter: mediaTypeFilter, specialFilter: specialFilter)
ForEach(Array(zip(items.indices, items)), id: \.1.id) { index, item in
MediaThumbnailView(
item: item,
isSelected: selectedItems.contains(item.id),
viewModel: viewModel,
onLongPress: {
if !isSelectionMode {
toggleSelectionMode()
selectedItems.insert(item.id)
}
},
onTap: {
if isSelectionMode {
toggleSelection(item: item)
} else {
viewModel.selectItem(item)
}
}
)
.aspectRatio(1, contentMode: .fit)
.background(
GeometryReader { geometry in
let frame = geometry.frame(in: .named("grid"))
Color.clear.preference(
key: ItemBoundsPreferenceKey.self,
value: [ItemBounds(id: item.id, bounds: frame, index: index)]
)
}
)
}
}
.padding(.horizontal, 2)
.coordinateSpace(name: "grid")
.onPreferenceChange(ItemBoundsPreferenceKey.self) { bounds in
itemBounds = Dictionary(uniqueKeysWithValues: bounds.map { ($0.id, $0) })
itemIndices = Dictionary(uniqueKeysWithValues: bounds.map { ($0.id, $0.index) })
}
.gesture(
DragGesture(minimumDistance: 0)
.onChanged { gesture in
if isSelectionMode {
let location = gesture.location
if !isDragging {
startDragging(at: location, in: itemBounds)
}
updateSelection(at: location, in: itemBounds)
}
}
.onEnded { _ in
endDragging()
}
)
}
.coordinateSpace(name: "refresh")
}
highPriorityGesture также не будет работать.
Когда я меняю его с помощью одновременных жестов, прокрутка снова начинает работать.
- НО - поскольку это одновременно, когда несколько активирован режим выбора, когда я перетаскиваю палец, галерея также начинает прокручиваться, и это становится очень неприятным занятием. После этой проблемы я понял, что в родной галерее iOS блокируется прокрутка, когда вы перетаскиваете для множественного выбора, и просто когда вы отпускаете палец. вы можете прокрутить еще раз, даже если активен режим множественного выбора.
Нашел несколько похожих проблем в stackoverflow, но они были все относится к iOS 18, а не только к iPhone. Мое приложение отлично работает на iOS 18 (15 Pro Max).
Жест перетаскивания iOS 18 блокирует просмотр прокрутки.
Вот некоторые из вещей, которые я пробовал:
совместное использование highPriorityGesture и одновременного жеста,
пробовал ненадолго заблокировать прокрутку во время перетаскивания,
реализовать очень сложные версии этих вещи с помощью claude,
попробуйте проверить, истинно ли isSelectionMode или нет.
Все они сломали другие вещи/не будут работать.
Наверное, мне не хватает чего-то довольно простого; но iPhone 11, являющийся единственным проблемным устройством, меня смущает. Я не хочу слишком сильно портить свою и без того хрупкую логику.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -iphone-11