Apple watch: как прокручивать только содержимое таблицы, а не весь пользовательский интерфейс часов?

Чтобы научиться программировать часы, я создал небольшое тестовое приложение, состоящее только из изображения и таблицы:

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

Приложение выполняется iOS и симуляторами часов. Изображение и содержимое таблицы корректно устанавливаются приложением.

Когда таблица слишком длинная, чтобы полностью поместиться на экране часов, я ожидал, что нажатие на таблицу позволит прокрутить ее содержимое. Однако прокручивается все содержимое часов, включая изображение (обратите внимание, что зеленый диск прокручивается наполовину вне поля зрения):
введите здесь описание изображения

Что мне нужно сделать, чтобы изображение оставалось фиксированным на экране, но позволяло прокручивать содержимое таблицы по вертикали?


person Reinhard Männer    schedule 24.08.2016    source источник


Ответы (2)


Хотя частный API поддерживает то, что вы хотите делать, эта функция не является общедоступной для нас ни в watchOS 2, ни в watchOS 3.

Мы ограничены либо прокруткой всего интерфейса (когда его содержимое больше размера экрана), либо отсутствием прокрутки всего интерфейса (когда его содержимое укладывается в размер экрана).

Вы можете отправить запрос функции с просьбой о статической группе, прикрепленном заголовке строки таблицы или области прокрутки.

Что приближается...

Новые WKCrownSequencer и WKCrownDelegate позволят вам взаимодействовать со сценой или конкретным объектом интерфейса, но нет возможности переопределить системный жест поддержка распознавания и прокрутки от имени всего контроллера интерфейса прокрутки.

Я не думаю, что есть элегантный способ реализовать то, что вы хотите сейчас, это сработало бы идеально.

Если вы полны решимости взломать или переосмыслить это...

Если вы не хотите ждать, пока Apple в конце концов предложит надлежащую поддержку того, что вам нужно, вот несколько вариантов, которые могут помочь вам подойти к этому с другой стороны.

  • Попробуйте заменить таблицу сборщиком. Средство выбора позволит вам прокручивать различные элементы на меньшем экране, но оно явно не будет выглядеть как таблица.

  • Ограничьте свою таблицу фиксированным количеством строк, которые не превышают размер экрана. Вы можете обновлять содержимое строки по мере прокрутки короны, но это будет эффект постраничного просмотра, а не эффект прокрутки.

  • Перейдите к Core Graphics, чтобы либо нарисовать индикатор активности местоположения, либо текст таблицы, чтобы создать иллюзию того, что часть экрана (не) прокручивается.

  • Измените цвет фона строки (строк) таблицы и позвольте цвету фона функционировать в качестве индикатора активности местоположения.

person Community    schedule 24.08.2016

В watchOS 3 просто установите любой объект в качестве делегата:

let crownSequencer = WKExtension.shared().rootInterfaceController!.crownSequencer
crownSequencer.delegate = self
crownSequencer.focus()

Затем прочитайте значение, реализуя:

func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double)
person Rivera    schedule 27.09.2016