2013-05-06 24 views
5

Tôi hiện đang có một view controller bao gồm Navigation bar, tiếp theo là UIView có hai UIButtons được thêm dưới dạng subViews. Sau đó, có một UITableView bên dưới bắt đầu ở dưới cùng của vùng chứa UIView.Làm cho UIView cuộn với UITableView nhưng ghim lên đầu ra khỏi chế độ xem

Hiện tại, khi người dùng cuộn UITableView, nó sẽ nằm sau số UIViewUIButtons. Những gì tôi thực sự muốn xảy ra là dành cho UIViewUIButtons để di chuyển lên với chế độ xem bảng nhưng chỉ bằng giá trị chiều cao của chúng trong trường hợp này là 58 pixel. Dòng chảy sẽ như thế này ...

1) Cuộn bảng và UIView di chuyển với nó cho 58 pixel đầu tiên.

2) Người dùng tiếp tục cuộn bảng nhưng UIView "ghim" chính nó chỉ ngoài tầm nhìn theo số navigation bar.

3) Khi người dùng cuộn bảng xuống dưới UIView sau đó được chọn và kéo trở lại chế độ xem. Tôi tin rằng ứng dụng Facebook mới thực hiện điều gì đó tương tự trong dòng thời gian.

Tôi không muốn đặt UIView làm số TableHeaderView của bảng vì tôi cũng có tính năng kéo làm mới, sau đó nằm phía trên các nút và trông thật khủng khiếp. Tôi đã cố gắng chơi xung quanh với các thuộc tính contentOffset của cơ bản scrollview của bảng nhưng đã trúng một bức tường gạch.

Bất kỳ lời khuyên nào về nơi bắt đầu sẽ được đánh giá cao.

Cảm ơn

CHỈNH SỬA: Tôi được thêm một chút và sử dụng mã này để di chuyển khung của UIView.

-(void) scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    NSLog (@"Content Offset: %f", self.tableView.contentOffset.y); 
    NSLog (@"Button Frame: %f", self.btnBackground.frame.origin.y); 

     if (self.tableView.contentOffset.y > 0) 
     { 
      CGRect newFrame = self.btnBackground.frame; 
      newFrame.origin.x = 0; 
      newFrame.origin.y = -self.tableView.contentOffset.y; 
      [self.btnBackground setFrame: newFrame]; 
     } 

} 

Phương pháp đại biểu scrollViewDidScroll không được kích hoạt đủ nhanh nếu chế độ xem bảng được cuộn nhanh. Kết quả là các UIView không hoàn toàn làm cho tất cả các cách trở lại vị trí ban đầu của nó khi di chuyển một cách nhanh chóng.

+1

Hey Tôi đang cố gắng giải quyết một vấn đề tương tự ngay bây giờ. Bạn đã bao giờ tìm ra phải làm gì? @paulmorris – Thomas

+0

Câu hỏi liên quan: http://stackoverflow.com/questions/25374090/move-a-view-when-scrolling-in-uitableview –

+0

Xin chào, tôi cũng đã đến một tình huống tương tự. Nhà thiết kế muốn bố cục hoạt động chính xác như CoordinatorLayout trong Android. Btw bạn đã tìm ra nó chưa? –

Trả lời

0

Vâng hỏi Câu hỏi (y) tốt, đối với tôi tôi sẽ đầu tiên: sử dụng một chính UIScrollView có chứa cả TopView của bạn và tableView dưới nó và có chiều rộng tương tự như đầu UIViewUITableView của bạn và thiết lập chiều cao của nó để là chiều cao (tableView) + chiều cao (topView). Thứ hai: kể từ UITableView là một subClass của UISCrollView bạn có thể sử dụng scrollViewDidScroll đại biểu để biết liệu bảng xem có được cuộn lên hoặc xuống hay không. trong này cas bạn sẽ có hai trường hợp:

1) tableview được cuộn lên => bạn thiết lập các nội dung bù đắp của scrollview chính là

[scrollView setContentOffset:CGPointMake(0, 58) animated:YES]; 

2) khi xem bảng là cuộn xuống bạn có thể đặt lại bù đắp nội dung một lần nữa

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

Cảm ơn bạn đã trả lời, nhưng điều này không tự động cuộn chế độ xem trên cùng với chế độ xem bảng và cuộn. Tất cả cần phải nhìn về cơ bản giống như UIView là một phần của tableView và cuộn trơn tru với nó. –

0

Độ lệch nội dung cuộn là ý tưởng hay. Ngoài ra nếu bạn tableview chỉ có một phần một cách tiếp cận là để làm một cái nhìn tiêu đề tùy chỉnh đại diện cho các widget cấp cao nhất. Nếu có nhiều hơn một phần, hãy tạo một phần trống bổ sung sẽ trả lại tiêu đề tùy chỉnh của bạn.

Bạn có thể tham khảo bài đăng tràn ngăn xếp này. Customize UITableview Header Section

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