Позиционирование UIScrollView scrollIndicatorInsets по краям, без пробелов? - PullRequest
0 голосов
/ 22 октября 2018

Как на самом деле работает ScrollView.scrollIndicatorInsets?

Если вы установите для всех вставок значение 0 по умолчанию и сделаете некоторую отладку, вы обнаружите, что полоса прокрутки не совсем рядом с нижним или правым краемпо умолчанию так и должно быть.

ScrollView.scrollIndicatorInsets = UIEdgeInsets.init(top: 0, left: 0, bottom: 0, right: 0)

Example

Как видите, между полосой прокрутки и краями прокрутки есть дополнительное расстояние.

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

Что на самом деле указывают вставки (да, я знаю, они указывают прямоугольник для полосы прокрутки)?Существует ли интервал по умолчанию, который iOS использует для полосы прокрутки, и я должен принять это во внимание?Есть ли свечение на виде слоя полосы прокрутки, отсюда и расстояние?

РЕДАКТИРОВАТЬ:

Я решил эту проблему, используя неконвенциональный подход, получив доступ к UIView из самой полосы прокрутки(subviews.last) и используя наименьший размер (который является толщиной).

1 Ответ

0 голосов
/ 24 октября 2018

Быстрая проверка показывает, что для индикаторов прокрутки со вставками, установленными на UIEdgeInsetsZero (по умолчанию), они размещаются по 3 пункта от краев.

Вы можете попробовать:

theScrollView.scrollIndicatorInsets = UIEdgeInsets.init(top: -3, left: -3, bottom: -3, right: -3)

следует выровнять горизонтальный индикатор заподлицо с нижней частью и заподлицо с левым и правым краями, а вертикальный индикатор - вправо, а также с верхним и нижним краями.

Вы может хотеть сначала получить фреймы, так как это возможно в разных устройствах / размерах / версиях iOS.

Редактировать:

Пара уточняющих заметок ...

scroll indicators - изображения.Вы можете найти их, просмотрев подпредставления представления прокрутки (код или с помощью иерархии представления отладки).

Вставки по умолчанию (нуля) помещают эти представления изображений на 3 точки от края рамки представления прокрутки.

При просмотре с прокруткой 300 x 500 источник вертикального индикатора:

  x:294.5 y:3.0   with a width of 2.5
  294.5 + 2.5 == 297
  // 3-pts from the right edge, 3-pts from the top

, а источник горизонтального индикатора:

  x:3.0 y:494.5   with a height of 2.5
  494.5 + 2.5 == 497
  // 3-pts from the left edge, 3-pts from the bottom

Итак, используя:

.scrollIndicatorInsets = UIEdgeInsets.init(top: -3, left: -3, bottom: -3, right: -3)

перемещает начало координат на

  // vertical
  x:297.5 y:0.0   with a width of 2.5
  297.5 + 2.5 == 300
  // flush to top and right edges

  // horizontal
  x:0.0 y:497.5   with a height of 2.5
  497.5 + 2.5 == 500
  // flush to left and bottom edges

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

Любопытно, что до тех пор, пока рамки индикатора не будут отображены на экране- либо мигая, либо прокручивая содержимое - их кадры устанавливаются на 7 пунктов по высоте (для вертикального индикатора) и 7 пунктов (для горизонтального) и располагаются в правом нижнем углу.

Итак, с рамкой прокрутки 500 x 300, рамки индикатора изначально:

  // vertical
  x:294.5 y:490.0 w:2.5 h:7.0
  // horizontal
  x:290.0 y:494.5 w:7.0 h:2.5

Это все еще говорит о том, что они находятся на расстоянии 3-х пунктов от краев, но это не так ясно ..И опять же, нет никаких гарантий, что это не изменится в будущем.

Если вы действительно хотите, чтобы индикаторы работали в нужном вам месте, лучше всего использовать пользовательские представления вместо встроенных.индикаторы.

...