UIScrollView - с включенной подкачкой страниц, я могу "изменить" ширину страницы? - PullRequest
31 голосов
/ 13 февраля 2010

Какой самый простой способ иметь представление прокрутки (с pagingEnabled, установленным в YES), для ширины страницы, установленной на что-то отличное от границ представления прокрутки?

Позвольте привести пример.Предположим, у меня есть представление прокрутки с 10 элементами, каждый шириной 150 пикселей, и мое представление прокрутки имеет ширину 300 пикселей.Если я начну с видимых видов 1 и 2 и прокручиваю по горизонтали вправо, я хочу, чтобы на следующей «странице» отображались пункты 2 и 3. Если я прокручиваю еще одну страницу вправо, я вижу элементы 3 и 4.

Кто-нибудь делал это?Если нет, то какую стратегию вы бы использовали?

Ответы [ 5 ]

44 голосов
/ 13 февраля 2010

Александр Репти только что написал в блоге об этой самой теме: http://blog.proculo.de/archives/180-Paging-enabled-UIScrollView-With-Previews.html. Краткий ответ: это не так просто, как просто изменить ширину страницы, но это не слишком сложно.

5 голосов
/ 16 февраля 2010

Mike

используйте подход из моего блога, с которым Бен связал вас. Сделайте UIScrollView в два раза меньше окружающего вида (то есть 150 пикселей) и переместите его влево, а не оставляйте по центру.

Это должно дать вам именно то поведение, которое вы хотели.

Ура, Alex

4 голосов
/ 25 мая 2012

Конечно, это можно сделать с помощью методов делегата scrollview & content-offset .

Ниже приведен подробный код для того же.

int start;

int end;

int k=0;

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView1
{

    pageControlUsed = NO;

    start = scrollView.contentOffset.x;

}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView1 willDecelerate:(BOOL)decelerate
{

    end = scrollView.contentOffset.x;

}   


- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView1{

    int diff = end-start;

        if (diff>0)
        {

         k=k+150;
         [scrollView setContentOffset:CGPointMake(k, 0) animated:YES];

        }
       else {

         k=k-150;
        [scrollView setContentOffset:CGPointMake(k, 0) animated:YES];

          }
}
2 голосов
/ 06 марта 2014

Просто переопределить scrollViewWillEndDragging

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    CGFloat pageWidth = 160;
    targetContentOffset->x = pageWidth * (int)(targetContentOffset->x / pageWidth);
}
1 голос
/ 03 августа 2015
UIScrollView *album = [[UIScrollView alloc] init];
album.translatesAutoresizingMaskIntoConstraints = NO;
album.pagingEnabled = YES;
album.clipsToBounds = NO;
album.showsHorizontalScrollIndicator = NO;
album.contentInset = UIEdgeInsetsMake(0, -50, 0, -50);
[view addSubview:album];


[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[_album(220)]" options:0 metrics:metrics views:views]];

[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_album(300)]" options:0 metrics:metrics views:views]];

это прекрасно работает на iOS 7.1 ~ 8.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...