Spec-Zone.ru › Kotlin 2

Руководства по миграции на iOS

На этой странице рассматриваются особенности iOS, которые следует учитывать при обновлении библиотеки Compose Multiplatform в проекте до более новой версии, начиная с версии 1.7.0.

Compose Multiplatform: переход с версии 1.6.11 на 1.7.0

Удаление параметра background в UIKitView и UIKitViewController

Устаревшие API UIKitView и UIKitViewController содержат параметр background, а новые — нет. Этот параметр сочли избыточным и удалили:

  • Если для новых экземпляров нужно задать фон представления взаимодействия, это можно сделать с помощью параметра factory.

  • Если фон должен обновляться, поместите соответствующий код в лямбда-выражение update.

Касания и жесты могут работать не так, как ожидается

Новое стандартное поведение при касании использует задержки, чтобы определить, предназначено ли касание для представления взаимодействия или для контейнера Compose этого представления: пользователь должен удерживать палец неподвижно не менее 150 мс, прежде чем представление взаимодействия получит касание.

Если нужно, чтобы Compose Multiplatform обрабатывал касания как раньше, рассмотрите новый экспериментальный конструктор UIKitInteropProperties. Он содержит параметр interactionMode, которому можно задать значение UIKitInteropInteractionMode.NonCooperative, чтобы Compose напрямую передавал касания представлениям взаимодействия.

Конструктор помечен как экспериментальный, поскольку в конечном итоге мы намерены описывать возможность взаимодействия с представлениями взаимодействия одним логическим флагом. Поведение, явно задаваемое параметром interactionMode, скорее всего, в будущем будет определяться автоматически.

Параметр accessibilityEnabled заменён на isNativeAccessibilityEnabled и по умолчанию отключён

Параметр accessibilityEnabled старых конструкторов UIKitView и UIKitViewController был перемещён и переименован: теперь он доступен как свойство UIKitInteropProperties.isNativeAccessibilityEnabled. По умолчанию ему также присваивается значение false.

Свойство isNativeAccessibilityEnabled помечает объединённое поддерево Compose для использования встроенных средств специальных возможностей. Поэтому не рекомендуется задавать ему значение true, если вам не нужны расширенные возможности специальных возможностей представления взаимодействия (например, веб-представлений).

Обоснование этого свойства и его значения по умолчанию см. в документации в коде для класса UIKitInteropProperties.

Удаление параметра onResize

Параметр onResize старых конструкторов UIKitView и UIKitViewController задавал пользовательскую рамку на основе аргумента rect, но не влиял на саму компоновку Compose, поэтому его использование было неочевидным. Кроме того, стандартная реализация параметра onResize требовала корректно задавать рамку представления взаимодействия и содержала некоторые детали реализации, необходимые для правильного обрезания представления.

Как обойтись без onResize:

  • Если нужно реагировать на изменение рамки представления взаимодействия, можно:

    • переопределить layoutSubviews для UIView взаимодействия;

    • переопределить viewDidLayoutSubviews для UIViewController взаимодействия;

    • или добавить onGloballyPositioned в цепочку Modifier.

  • Если нужно задать рамку представления взаимодействия, используйте соответствующие модификаторы Compose: size, fillMaxSize и другие.

Некоторые способы использования onReset больше не работают

Использовать лямбда-выражение onReset, не равное null, вместе с remember { UIView() } нельзя.

Рассмотрим следующий код:

val view = remember { UIView() }

UIKitView(factory = { view }, onReset = { /* ... */ })

Когда UIKitView входит в композицию, вызывается либо factory, либо onReset, но не оба. Поэтому, если onReset не равно null, сохранённый view может отличаться от того, который отображается на экране: компонуемый элемент может выйти из композиции, оставив экземпляр представления, который будет повторно использован после сброса в onReset, вместо создания нового экземпляра с помощью factory.

Чтобы избежать таких ошибок, не указывайте значение onReset в конструкторе. Возможно, потребуется выполнять обратные вызовы из представления взаимодействия в зависимости от контекста, в котором функция, создающая это представление, вошла в композицию. В этом случае сохраните обратный вызов в представлении с помощью update на onReset.

12 ноября 2024 г.
Поддержка специальных возможностей iOSКомпоненты только для Android

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/compose-ios-migration.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API