UIScrollView горизонтальная подкачка страниц как вкладки Mobile Safari

Вы могли попробовать powershell. Существуют получать-содержание и содержание набора сборка commandlets, в которой Вы могли использовать.

88
задан TheNeil 27 May 2019 в 14:21
поделиться

2 ответа

UIScrollView с включенным разбиением на страницы будет останавливаться при кратной ширине (или высоте) его кадра. Итак, первый шаг - выяснить, какой ширины вы хотите, чтобы ваши страницы были. Установите ширину UIScrollView . Затем установите размеры вашего вложенного представления, какими бы большими они вам ни были, и установите их центры на основе кратной ширины UIScrollView .

Затем, поскольку вы хотите видеть другие страницы, конечно установите clipsToBounds на NO , как указано в mhjoy. Уловка теперь заключается в том, чтобы заставить его прокручиваться, когда пользователь начинает перетаскивание за пределы диапазона кадра UIScrollView . Мое решение (когда мне приходилось делать это совсем недавно) было следующим:

Создать подкласс UIView (т.е. ClipView ), который будет содержать UIScrollView и его подвиды. По сути, он должен иметь структуру того, что, как вы могли бы предположить, иметь UIScrollView при нормальных обстоятельствах. Поместите UIScrollView в центр ClipView . Убедитесь, что для clipsToBounds ClipView установлено значение ДА , если его ширина меньше, чем ширина его родительского представления. Кроме того, ClipView нуждается в ссылке на UIScrollView .

Последний шаг - переопределить - (UIView *) hitTest: withEvent: внутри ClipView .

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
  return [self pointInside:point withEvent:event] ? scrollView : nil;
}

Это в основном расширяет сенсорную область UIScrollView до рамки его родительского представления, что вам и нужно.

Другой вариант - создать подкласс UIScrollView и переопределить его - (BOOL) pointInside: (CGPoint) point withEvent: (UIEvent *) event , однако вам все равно понадобится вид контейнера для отсечения, и может быть трудно определить, когда вернуть ДА , основываясь только на кадре UIScrollView .

ПРИМЕЧАНИЕ: Вам также следует взгляните на hitTest: withEvent: модификация Юри Пакасте, если у вас возникли проблемы с взаимодействием с пользователем в подпредставлении.

260
ответ дан 24 November 2019 в 07:22
поделиться

Вышеупомянутое решение ClipView сработало для меня, но мне пришлось использовать другую реализацию - [UIView hitTest: withEvent:] . В версии Эда Марти не было взаимодействия с пользователем, работающего с вертикальными прокрутками, которые у меня есть внутри горизонтального.

У меня сработала следующая версия:

-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event
{
    UIView* child = nil;
    if ((child = [super hitTest:point withEvent:event]) == self)
        return self.scrollView;     
    return child;
}
69
ответ дан 24 November 2019 в 07:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: