Подтвердить что ты не робот

Проблема UICollectionView iOS 9 в проекте с поддержкой языков RTL

Кажется, что новая функция автоматического флип-интерфейса на языках RTL вызывает проблемы при использовании UICollectionView.

Я использовал ограничения типа Trailing/Leading для представления коллекции, и они переключили свои значения, как и должно, на язык RTL.

Проблема состоит в том, что фактически представленные данные относятся к последнему indexPath в источнике данных коллекции, а UIScrollView.contentOffset.x первой ячейки - 0.

Правильное поведение было бы одним из следующих:

  • Правильно отображает первый indexPath и переключает направление прокрутки (справа) - Наилучшая опция
  • Не переворачивать пользовательские интерфейсы/ограничения, поэтому данные-данные/ indexPath/scrollView.contentOffset.x будут синхронизированы. Опция, которая отключает поддержку RTL.
  • Представление ячейки и данных последней indexPath, но фиксация scrollView.contentOffset.x для представления последней позиции ячейки.

Я думаю, что Apple может исправить это когда-нибудь в будущем, но между тем нам придется использовать обходные пути, такие как реверсивный массив и/или прокрутку к последнему объекту.

4b9b3361

Ответ 1

Есть одно общее решение для этой проблемы, которое работает для меня, следуйте ниже, чтобы преодолеть эту проблему,

  • Дайте ограничение автомакета в соответствии с вашим требованием, а затем от инспектора атрибутов измените свойство семантического управления представления коллекции на Force справа налево из раскадровки.

введите описание изображения здесь

  • Затем откройте раскадровку в качестве исходного кода и найдите "ведущие" атрибуты вашего соответствующего вида коллекции и замените это на "левое" и такое же для "задней", замените "правильной". Теперь вы почти закончили.

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

  • теперь это даст вам результат согласно вашему требованию.

Ответ 2

Я был в подобной ситуации и нашел решение для этого. Если вы используете swift, добавьте следующий фрагмент в свой проект и убедитесь, что bounds.origin всегда следует передним фронтом представления коллекции.

extension UICollectionViewFlowLayout {

    open override var flipsHorizontallyInOppositeLayoutDirection: Bool {
        return true
    }
}

Если вы используете Objective-C, просто подклассифицируйте класс UICollectionViewLayout и переопределите flipsHorizontallyInOppositeLayoutDirection и верните true. Используйте этот подкласс в качестве объекта макета вашего вида коллекции.