2010-12-18 25 views
5

Tôi đã UIScrollView với pagingEnabled thiết lập để YES, và lập trình di chuyển nội dung của nó xuống dưới:UIScrollView: vòi cuộn duy nhất nó để đầu

CGPoint contentOffset = scrollView.contentOffset; 
contentOffset.y = scrollView.contentSize.height - scrollView.frame.size.height; 
[scrollView setContentOffset:contentOffset animated:YES]; 

nó cuộn thành công, nhưng sau đó, trên máy đơn cuộn nội dung của nó lên để bù đắp rằng nó có ngay trước khi nó cuộn xuống. Điều đó chỉ xảy ra khi tôi lập trình cuộn nội dung của scrollView xuống dưới và sau đó nhấn. Khi tôi cuộn đến bất kỳ phần bù nào khác và sau đó nhấn, không có gì xảy ra.

Đó chắc chắn không phải những gì tôi muốn nhận. Làm thế nào mà nên được cố định?

Cảm ơn bạn rất nhiều!

Timur.

Trả lời

1

này có vẻ là một lỗi:

UIScrollView doesn't remember the position

Tôi đã thử nghiệm này trên iOS 4.2 (Simulator) và vấn đề vẫn còn.

+0

Cảm ơn bạn, vì vậy tôi đã đăng giải pháp thay thế dưới đây đã giúp tôi. – indexless

0

Khi di chuyển một scrollview tôi sẽ đề nghị sử dụng

[scrollView scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];

Trường hợp rect là vị trí bạn đang sau. (Trong trường hợp này rect sẽ là đỉnh của scrollview).

Thay đổi bù đắp nội dung không đúng cách để cuộn một chế độ xem cuộn.

+0

Trên một lưu ý khác, có thể tôi đã hiểu sai câu hỏi: D – Accatyyc

+0

Accatyyc, cảm ơn bạn đã trả lời. Tôi đã thay thế setContentOffset: với scrollRectToVisible thích hợp: cuộc gọi, nhưng tiếc là không khắc phục được sự cố. – indexless

3

Cách giải quyết sau đây đã giúp đỡ (giả định rằng một mở rộng UIScrollView với một thể loại, vì vậy 'tự' đề cập đến cá thể của nó):

-(BOOL) scrolledToBottom 
{ 
    return (self.contentSize.height <= self.frame.size.height) || 
      (self.contentOffset.y == self.contentSize.height - self.frame.size.height); 
} 

Sau đó, người ta đôi khi cần rẽ pagingEnabled tắt, chỉ cần ở vị trí nơi xem cuộn xuống đáy của nó. Trong các đại biểu (pagingEnabled là khởi tạo là trên tất nhiên, kể từ khi vấn đề xảy ra chỉ khi nó được kích hoạt):

-(void) scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (scrollView.pagingEnabled == YES) 
    { 
     if ([scrollView scrolledToBottom] == YES) 
      scrollView.pagingEnabled = NO; 
    } 
    else 
    { 
     if ([scrollView scrolledToBottom] == NO) 
      scrollView.pagingEnabled = YES; 
    } 
} 
+0

Cảm ơn bạn! Tôi đã đơn giản hóa mã cho trường hợp của tôi (di chuyển sang phải) đến một dòng. Kiểm tra câu trả lời của tôi dưới đây :) – Tomasz

4

Tôi chỉ tìm ra nguyên nhân gây ra vấn đề này, và làm thế nào để tránh nó. Nếu bạn có pagingEnabled được đặt thành YES trên chế độ xem cuộn, bạn phải đặt contentOffset là bội số của kích thước hiển thị của chế độ xem cuộn (nghĩa là bạn phải ở trên ranh giới phân trang).

dụ bê tông:

Nếu xem di chuyển của bạn là (nói) cao 460 pixel với diện tích nội dung của 920, bạn sẽ cần phải thiết lập các nội dung bù đắp để 0 hoặc 460 nếu bạn muốn tránh những "cuộn để bắt đầu nhấn vào "sự cố.

Là phần thưởng, kết quả cuối cùng có thể trông đẹp hơn vì chế độ xem cuộn của bạn sẽ được căn chỉnh với ranh giới phân trang. :)

+0

wlach, cảm ơn bạn! Nhưng khi bạn có nội dung với chiều cao không nhiều chiều cao khung hình, bạn sẽ không nhận được hành vi đúng, phải không? :) – indexless

+0

Không chắc chắn, nhưng tại sao bạn cho phép phân trang nếu nội dung không phải là bội số của chiều cao khung? – wlach

5

Hack nhỏ này ngăn cản UIScrollView di chuyển khi khai thác. Có vẻ như điều này đang xảy ra khi chế độ xem cuộn đã bật phân trang.

Trong đại biểu UIScrollView của bạn thêm phương pháp này:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    scrollView.pagingEnabled = self.scrollView.contentOffset.x < (self.scrollView.contentSize.width - self.scrollView.frame.size.width); 
} 

này vô hiệu hóa các phân trang khi xem cuộn đến cuối ngay trong cuộn ngang (trường hợp sử dụng của tôi, bạn có thể thích ứng với nó để hướng khác một cách dễ dàng).

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