2010-02-13 37 views
29

Cách đơn giản nhất để có chế độ xem cuộn (với pagingEnabled được đặt thành YES) có chiều rộng trang được đặt thành một cái gì đó khác với giới hạn của chế độ xem cuộn?UIScrollView - khi bật phân trang, tôi có thể "thay đổi" chiều rộng của trang không?

Hãy để tôi đưa ra một ví dụ. Giả sử tôi có chế độ xem cuộn với 10 mục, mỗi chiều rộng 150 pixel và chế độ xem cuộn của tôi rộng 300 pixel. Nếu tôi bắt đầu với chế độ xem 1 và 2 hiển thị và cuộn theo chiều ngang sang phải, tôi muốn trang "tiếp theo" hiển thị các mục 2 và 3. Nếu tôi cuộn thêm một trang sang bên phải, tôi sẽ thấy các mục 3 và 4.

Có ai đã làm điều này không? Nếu không, bạn sẽ sử dụng chiến lược nào?

Trả lời

42

Alexander Repty chỉ viết blog về chủ đề này: http://blog.proculo.de/archives/180-Paging-enabled-UIScrollView-With-Previews.html. Câu trả lời ngắn gọn: nó không đơn giản như chỉ thay đổi chiều rộng của 'trang', nhưng nó không quá khó.

+0

Tôi đã nhìn thấy phương pháp này đề cập ở nơi khác và thử nó, nhưng tiếc là tôi không nghĩ rằng nó làm những gì tôi muốn. Tôi cần nhiều hơn để xem các cạnh của các vật xung quanh - Trong trường hợp của tôi, tôi cần phải có hai mục hoàn toàn trên màn hình. Cách tiếp cận này không may đã không làm việc quá tốt cho tôi, đặc biệt là trên các cạnh ngoài cùng bên trái/bên phải. –

+7

Chỉ cần làm cho scrollview của bạn rộng 150px, nhưng tắt cắt bớt. Đặt toàn bộ nội dung bên trong một khung nhìn rộng 300 px và bật BẬT cho nó. –

+0

Cảm ơn, Ben. Như tôi đã đề cập trong bình luận của tôi về câu trả lời của Alexander, điều này chắc chắn đặt tôi vào con đường đúng đắn. –

5

Mike,

sử dụng cách tiếp cận từ blog của tôi mà Ben đã liên kết với bạn. Đặt UIScrollView bằng một nửa kích thước của chế độ xem xung quanh (nghĩa là 150px) và di chuyển nó sang bên trái thay vì để nó ở giữa.

Điều đó sẽ cung cấp cho bạn chính xác hành vi bạn muốn.

Chúc mừng, Alex

+0

Nó không hoàn toàn đơn giản, nhưng tôi tin rằng tôi đã tìm ra. Bài đăng của bạn chắc chắn đã giúp - cảm ơn bạn! –

4

Nó chắc chắn có thể được thực hiện với sự giúp đỡ của scrollview phương pháp đại biểu & nội dung bù đắp.

Dưới đây là mã chi tiết cho cùng.

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

Đơn giản chỉ cần ghi đè scrollViewWillEndDragging

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset { 
    CGFloat pageWidth = 160; 
    targetContentOffset->x = pageWidth * (int)(targetContentOffset->x/pageWidth); 
} 
+1

không hoạt động trong ios7. – kritzikratzi

1
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]]; 

này hoạt động tốt trên iOS 7.1 ~ 8.2

Các vấn đề liên quan